| // Copyright 2021 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "typecd/port.h" |
| |
| #include <base/files/scoped_temp_dir.h> |
| #include <base/logging.h> |
| |
| #include "fuzzer/FuzzedDataProvider.h" |
| |
| class Environment { |
| public: |
| Environment() { logging::SetMinLogLevel(logging::LOGGING_ERROR); } |
| }; |
| |
| extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { |
| static Environment env; |
| FuzzedDataProvider data_provider(data, size); |
| |
| base::ScopedTempDir scoped_temp_dir; |
| CHECK(scoped_temp_dir.CreateUniqueTempDir()); |
| auto temp_dir = scoped_temp_dir.GetPath(); |
| |
| // Fake sysfs director for the port. |
| auto port_path = temp_dir.Append("port0"); |
| CHECK(base::CreateDirectory(port_path)); |
| |
| // Add data role and power role sysfs. |
| auto val = data_provider.ConsumeRandomLengthString(20); |
| CHECK_GE( |
| base::WriteFile(port_path.Append("data_role"), val.c_str(), val.length()), |
| 0); |
| val = data_provider.ConsumeRandomLengthString(20); |
| CHECK_GE(base::WriteFile(port_path.Append("power_role"), val.c_str(), |
| val.length()), |
| 0); |
| |
| typecd::Port port(base::FilePath(port_path), 0); |
| |
| return 0; |
| } |