| /* |
| * Copyright 2020 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 <fuzzer/FuzzedDataProvider.h> |
| |
| #include <brillo/data_encoding.h> |
| #include <brillo/url_utils.h> |
| |
| namespace { |
| // Set arbitrary limitation on long inputs to make the fuzzer faster |
| constexpr int kMaxStringLength = 256; |
| constexpr int kMaxParamsSize = 8; |
| |
| void FuzzCombine(FuzzedDataProvider* provider) { |
| std::ignore = brillo::url::Combine( |
| provider->ConsumeRandomLengthString(kMaxStringLength), |
| provider->ConsumeRandomLengthString(kMaxStringLength)); |
| } |
| |
| void FuzzGetQueryString(FuzzedDataProvider* provider) { |
| brillo::url::GetQueryString( |
| provider->ConsumeRandomLengthString(kMaxStringLength), |
| provider->ConsumeBool()); |
| } |
| |
| void FuzzGetQueryStringParameters(FuzzedDataProvider* provider) { |
| brillo::url::GetQueryStringParameters( |
| provider->ConsumeRandomLengthString(kMaxStringLength)); |
| } |
| |
| void FuzzGetQueryStringValue(FuzzedDataProvider* provider) { |
| brillo::url::GetQueryStringValue( |
| provider->ConsumeRandomLengthString(kMaxStringLength), |
| provider->ConsumeRandomLengthString(kMaxStringLength)); |
| } |
| |
| void FuzzTrimOffQueryString(FuzzedDataProvider* provider) { |
| auto url = provider->ConsumeRandomLengthString(kMaxStringLength); |
| brillo::url::TrimOffQueryString(&url); |
| } |
| |
| void FuzzRemoveQueryString(FuzzedDataProvider* provider) { |
| std::ignore = brillo::url::RemoveQueryString( |
| provider->ConsumeRandomLengthString(kMaxStringLength), |
| provider->ConsumeBool()); |
| } |
| |
| void FuzzAppendQueryParam(FuzzedDataProvider* provider) { |
| std::ignore = brillo::url::AppendQueryParam( |
| provider->ConsumeRandomLengthString(kMaxStringLength), |
| provider->ConsumeRandomLengthString(kMaxStringLength), |
| provider->ConsumeRandomLengthString(kMaxStringLength)); |
| } |
| |
| void FuzzAppendQueryParams(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.emplace_back( |
| provider->ConsumeRandomLengthString(kMaxStringLength), |
| provider->ConsumeRandomLengthString(kMaxStringLength)); |
| } |
| std::ignore = brillo::url::AppendQueryParams( |
| provider->ConsumeRandomLengthString(kMaxStringLength), param_list); |
| } |
| |
| void FuzzHasQueryString(FuzzedDataProvider* provider) { |
| brillo::url::HasQueryString( |
| provider->ConsumeRandomLengthString(kMaxStringLength)); |
| } |
| |
| } // namespace |
| |
| extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { |
| FuzzedDataProvider data_provider(data, size); |
| FuzzCombine(&data_provider); |
| FuzzGetQueryString(&data_provider); |
| FuzzGetQueryStringParameters(&data_provider); |
| FuzzGetQueryStringValue(&data_provider); |
| FuzzTrimOffQueryString(&data_provider); |
| FuzzRemoveQueryString(&data_provider); |
| FuzzAppendQueryParam(&data_provider); |
| FuzzAppendQueryParams(&data_provider); |
| FuzzHasQueryString(&data_provider); |
| return 0; |
| } |