Coverage Report

Created: 2026-09-28 07:02

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
}