// Copyright 2019 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 #include #include #include #include #include namespace { constexpr int kMaxStringLength = 256; constexpr int kMaxParamsSize = 8; void FuzzUrlEncodeDecode(FuzzedDataProvider* provider) { brillo::data_encoding::UrlEncode( provider->ConsumeRandomLengthString(kMaxStringLength).c_str(), provider->ConsumeBool()); brillo::data_encoding::UrlDecode( provider->ConsumeRandomLengthString(kMaxStringLength).c_str()); } void FuzzWebParamsEncodeDecode(FuzzedDataProvider* provider) { brillo::data_encoding::WebParamList param_list; const auto num_params = provider->ConsumeIntegralInRange(0, kMaxParamsSize); for (auto i = 0; i < num_params; i++) { param_list.push_back(std::pair( provider->ConsumeRandomLengthString(kMaxStringLength), provider->ConsumeRandomLengthString(kMaxStringLength))); } brillo::data_encoding::WebParamsEncode(param_list, provider->ConsumeBool()); brillo::data_encoding::WebParamsDecode( provider->ConsumeRandomLengthString(kMaxStringLength)); } void FuzzBase64EncodeDecode(FuzzedDataProvider* provider) { brillo::data_encoding::Base64Encode( provider->ConsumeRandomLengthString(kMaxStringLength)); brillo::Blob output; brillo::data_encoding::Base64Decode( provider->ConsumeRandomLengthString(kMaxStringLength), &output); } bool IgnoreLogging(int, const char*, int, size_t, const std::string&) { return true; } } // namespace class Environment { public: Environment() { // Disable logging. Normally this would be done with logging::SetMinLogLevel // but that doesn't work for brillo::Error because it's not using the // LOG(ERROR) macro which is where the actual log level check occurs. logging::SetLogMessageHandler(&IgnoreLogging); } }; extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { static Environment env; FuzzedDataProvider data_provider(data, size); FuzzUrlEncodeDecode(&data_provider); FuzzWebParamsEncodeDecode(&data_provider); FuzzBase64EncodeDecode(&data_provider); return 0; }