/src/simdjson/fuzz/fuzz_ondemand.cpp
Line | Count | Source |
1 | | #include "FuzzUtils.h" |
2 | | #include "simdjson.h" |
3 | | #include <cstddef> |
4 | | #include <cstdint> |
5 | | #include <string> |
6 | | |
7 | 7.27k | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { |
8 | 7.27k | FuzzData fd(Data, Size); |
9 | 7.27k | const int action = fd.getInt<0, 12>(); |
10 | | |
11 | | // split the remainder of the document into strings |
12 | 7.27k | auto strings = fd.splitIntoStrings(); |
13 | 7.28k | while (strings.size() < 1) { |
14 | 2 | strings.emplace_back(); |
15 | 2 | } |
16 | 7.27k | #if SIMDJSON_EXCEPTIONS |
17 | 7.27k | try { |
18 | 7.27k | #endif |
19 | 7.27k | simdjson::ondemand::parser parser; |
20 | 7.27k | simdjson::padded_string padded(strings[0]); |
21 | 7.27k | auto doc = parser.iterate(padded); |
22 | 7.27k | if (doc.error()) { |
23 | 1.01k | return 0; |
24 | 1.01k | } |
25 | 88.5k | for (auto item : doc) { |
26 | 88.5k | switch (action) { |
27 | 11.9k | case 0: { |
28 | 11.9k | simdjson_unused auto x = item.get_string(); |
29 | 11.9k | } break; |
30 | 1.08k | case 1: { |
31 | 1.08k | simdjson_unused auto x = item.get_bool(); |
32 | 1.08k | } break; |
33 | 2.24k | case 2: { |
34 | 2.24k | simdjson_unused auto x = item.get_array(); |
35 | 2.24k | } break; |
36 | 2.35k | case 3: { |
37 | 2.35k | simdjson_unused auto x = item.get_int64(); |
38 | 2.35k | } break; |
39 | 60.7k | case 4: { |
40 | 60.7k | simdjson_unused auto x = item.get_double(); |
41 | 60.7k | } break; |
42 | 1.52k | case 5: { |
43 | 1.52k | simdjson_unused auto x = item.get_object(); |
44 | 1.52k | } break; |
45 | 2.89k | case 6: { |
46 | 2.89k | simdjson_unused auto x = item.get_uint64(); |
47 | 2.89k | } break; |
48 | 758 | case 7: { |
49 | 758 | simdjson_unused auto x = item.get_raw_json_string(); |
50 | 758 | } break; |
51 | 1.09k | case 8: { |
52 | 1.09k | simdjson_unused auto x = item.is_null(); |
53 | 1.09k | } break; |
54 | 1.03k | case 9: { |
55 | 1.03k | simdjson_unused auto x = item.begin(); |
56 | 1.03k | } break; |
57 | 395 | case 10: { |
58 | 395 | simdjson_unused auto x = item.end(); |
59 | 395 | } break; |
60 | 2.12k | case 11: { |
61 | 6.19k | for (auto e : item) { |
62 | 6.19k | simdjson_unused auto x = e.is_null(); |
63 | 6.19k | } |
64 | 2.12k | } break; |
65 | 359 | default:; |
66 | 88.5k | } |
67 | 88.5k | } |
68 | 6.26k | #if SIMDJSON_EXCEPTIONS |
69 | 6.26k | } catch (...) { |
70 | 0 | } |
71 | 0 | #endif |
72 | | |
73 | 0 | return 0; |
74 | 7.27k | } |