/src/poco/Foundation/fuzzing/MiscFuzzing.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | #include "Poco/URI.h" |
2 | | #include "Poco/Path.h" |
3 | | #include "Poco/UUID.h" |
4 | | #include "Poco/UTF8String.h" |
5 | | #include <fuzzer/FuzzedDataProvider.h> |
6 | | |
7 | | using namespace Poco; |
8 | | |
9 | | static void fuzzURI(FuzzedDataProvider& dataProvider) |
10 | 2.50k | { |
11 | 2.50k | try |
12 | 2.50k | { |
13 | 2.50k | URI uri1(dataProvider.ConsumeRandomLengthString()); |
14 | 2.50k | URI uri2(uri1, dataProvider.ConsumeRandomLengthString()); |
15 | | |
16 | 2.50k | URI uri3(uri2); |
17 | 2.50k | uri3.normalize(); |
18 | 2.50k | uri3.setQueryParameters(uri1.getQueryParameters()); |
19 | 2.50k | uri2 = uri3.toString(); |
20 | 2.50k | } |
21 | 2.50k | catch (const std::exception&) |
22 | 2.50k | { |
23 | 347 | } |
24 | 2.50k | } |
25 | | |
26 | | static void fuzzPath(FuzzedDataProvider& dataProvider) |
27 | 2.83k | { |
28 | 2.83k | try |
29 | 2.83k | { |
30 | 2.83k | Path path1; |
31 | 2.83k | path1.tryParse(dataProvider.ConsumeRandomLengthString()); |
32 | | |
33 | 2.83k | Path path2(path1, Path(dataProvider.ConsumeRandomLengthString())); |
34 | 2.83k | Path path3 = path1.absolute(); |
35 | 2.83k | Path path4 = Path::expand(dataProvider.ConsumeRandomLengthString()); |
36 | | |
37 | 2.83k | const auto style1 = dataProvider.ConsumeIntegralInRange<char>(Path::PATH_UNIX, Path::PATH_GUESS); |
38 | 2.83k | const auto style2 = dataProvider.ConsumeIntegralInRange<char>(Path::PATH_UNIX, Path::PATH_GUESS); |
39 | 2.83k | path3.assign(path4.toString(static_cast<Path::Style>(style1)), static_cast<Path::Style>(style2)); |
40 | 2.83k | } |
41 | 2.83k | catch (const std::exception&) |
42 | 2.83k | { |
43 | 420 | } |
44 | 2.83k | } |
45 | | |
46 | | static void fuzzUUID(FuzzedDataProvider& dataProvider) |
47 | 372 | { |
48 | 372 | try |
49 | 372 | { |
50 | 372 | UUID uuid1(dataProvider.ConsumeRandomLengthString()); |
51 | 372 | UUID uuid2(uuid1.toString()); |
52 | 372 | uuid2.tryParse(dataProvider.ConsumeRandomLengthString()); |
53 | 372 | } |
54 | 372 | catch (const std::exception&) |
55 | 372 | { |
56 | 347 | } |
57 | 372 | } |
58 | | |
59 | | static void fuzzUTF8String(FuzzedDataProvider& dataProvider) |
60 | 1.78k | { |
61 | 1.78k | try |
62 | 1.78k | { |
63 | 1.78k | auto str1 = UTF8::unescape(dataProvider.ConsumeRandomLengthString()); |
64 | 1.78k | auto str2 = UTF8::escape(str1); |
65 | | |
66 | 1.78k | UTF8::toUpperInPlace(str1); |
67 | 1.78k | UTF8::toLowerInPlace(str2); |
68 | 1.78k | } |
69 | 1.78k | catch (const std::exception&) |
70 | 1.78k | { |
71 | 0 | } |
72 | 1.78k | } |
73 | | |
74 | | extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) |
75 | 7.49k | { |
76 | 7.49k | FuzzedDataProvider dataProvider(data, size); |
77 | | |
78 | 7.49k | switch (dataProvider.ConsumeIntegral<char>()) |
79 | 7.49k | { |
80 | 2.50k | case 0: |
81 | 2.50k | fuzzURI(dataProvider); |
82 | 2.50k | break; |
83 | 2.83k | case 1: |
84 | 2.83k | fuzzPath(dataProvider); |
85 | 2.83k | break; |
86 | 372 | case 2: |
87 | 372 | fuzzUUID(dataProvider); |
88 | 372 | break; |
89 | 1.78k | case 3: |
90 | 1.78k | fuzzUTF8String(dataProvider); |
91 | 1.78k | break; |
92 | 7.49k | } |
93 | | |
94 | 7.49k | return 0; |
95 | 7.49k | } |