xref: /aosp_15_r20/external/cronet/base/strings/pattern_fuzzer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2022 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <string>
8*6777b538SAndroid Build Coastguard Worker #include <tuple>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <fuzzer/FuzzedDataProvider.h>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/strings/pattern.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/strings/utf_string_conversions.h"
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace {
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker // Prevent huge inputs from hitting time limits.
18*6777b538SAndroid Build Coastguard Worker constexpr size_t kMaxLength = 1000;
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker }  // namespace
21*6777b538SAndroid Build Coastguard Worker 
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)22*6777b538SAndroid Build Coastguard Worker extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
23*6777b538SAndroid Build Coastguard Worker   FuzzedDataProvider provider(data, size);
24*6777b538SAndroid Build Coastguard Worker   std::string string = provider.ConsumeRandomLengthString(kMaxLength);
25*6777b538SAndroid Build Coastguard Worker   std::string pattern = provider.ConsumeRandomLengthString(kMaxLength);
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker   std::ignore = base::MatchPattern(string, pattern);
28*6777b538SAndroid Build Coastguard Worker   // Test the wide-string version as well. Note that the Unicode conversion
29*6777b538SAndroid Build Coastguard Worker   // function skips errors (returning the best conversion possible), which is
30*6777b538SAndroid Build Coastguard Worker   // good enough for the fuzzer.
31*6777b538SAndroid Build Coastguard Worker   std::ignore =
32*6777b538SAndroid Build Coastguard Worker       base::MatchPattern(base::UTF8ToUTF16(string), base::UTF8ToUTF16(pattern));
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   return 0;
35*6777b538SAndroid Build Coastguard Worker }
36