Skip to content

Commit 92c34f7

Browse files
authored
do not use deprecated apis in the fuzzers (simdjson#705)
* move from deprecated interface in fuzz dump raw tape * update fuzz_dump to the non deprecated replacement * replace use of deprecated api * hopefully fix windows build
1 parent 93328c8 commit 92c34f7

File tree

4 files changed

+73
-64
lines changed

4 files changed

+73
-64
lines changed

fuzz/fuzz_dump.cpp

Lines changed: 49 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,58 +3,61 @@
33
#include <cstdint>
44
#include <iostream>
55
#include <string>
6+
#include <string_view>
67

78
#include "NullBuffer.h"
89

9-
// from the README on the front page
10-
void compute_dump(simdjson::ParsedJson::Iterator &pjh) {
11-
NulOStream os;
12-
13-
if (pjh.is_object()) {
14-
os << "{";
15-
if (pjh.down()) {
16-
pjh.print(os); // must be a string
17-
os << ":";
18-
pjh.next();
19-
compute_dump(pjh); // let us recurse
20-
while (pjh.next()) {
21-
os << ",";
22-
pjh.print(os);
23-
os << ":";
24-
pjh.next();
25-
compute_dump(pjh); // let us recurse
26-
}
27-
pjh.up();
28-
}
29-
os << "}";
30-
} else if (pjh.is_array()) {
31-
os << "[";
32-
if (pjh.down()) {
33-
compute_dump(pjh); // let us recurse
34-
while (pjh.next()) {
35-
os << ",";
36-
compute_dump(pjh); // let us recurse
37-
}
38-
pjh.up();
10+
// example from doc/basics.md#tree-walking-and-json-element-types
11+
static void print_json(std::ostream& os, simdjson::dom::element element) {
12+
const char endl='\n';
13+
switch (element.type()) {
14+
case simdjson::dom::element_type::ARRAY:
15+
os << "[";
16+
for (simdjson::dom::element child : simdjson::dom::array(element)) {
17+
print_json(os, child);
18+
os << ",";
19+
}
20+
os << "]";
21+
break;
22+
case simdjson::dom::element_type::OBJECT:
23+
os << "{";
24+
for (simdjson::dom::key_value_pair field : simdjson::dom::object(element)) {
25+
os << "\"" << field.key << "\": ";
26+
print_json(os, field.value);
27+
}
28+
os << "}";
29+
break;
30+
case simdjson::dom::element_type::INT64:
31+
os << int64_t(element) << endl;
32+
break;
33+
case simdjson::dom::element_type::UINT64:
34+
os << uint64_t(element) << endl;
35+
break;
36+
case simdjson::dom::element_type::DOUBLE:
37+
os << double(element) << endl;
38+
break;
39+
case simdjson::dom::element_type::STRING:
40+
os << std::string_view(element) << endl;
41+
break;
42+
case simdjson::dom::element_type::BOOL:
43+
os << bool(element) << endl;
44+
break;
45+
case simdjson::dom::element_type::NULL_VALUE:
46+
os << "null" << endl;
47+
break;
3948
}
40-
os << "]";
41-
} else {
42-
pjh.print(os); // just print the lone value
43-
}
4449
}
45-
4650
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
4751

48-
try {
49-
auto pj = simdjson::build_parsed_json(Data, Size);
50-
if (!pj.is_valid()) {
51-
throw 1;
52+
try {
53+
simdjson::dom::parser pj;
54+
auto elem=pj.parse(Data, Size);
55+
auto v=elem.value();
56+
NulOStream os;
57+
//std::ostream& os(std::cout);
58+
print_json(os,v);
59+
} catch (...) {
5260
}
53-
simdjson::ParsedJson::Iterator pjh(pj);
54-
if (pjh.is_ok()) {
55-
compute_dump(pjh);
56-
}
57-
} catch (...) {
58-
}
59-
return 0;
61+
return 0;
62+
6063
}

fuzz/fuzz_dump_raw_tape.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88

99
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
1010

11-
try {
12-
auto pj = simdjson::build_parsed_json(Data, Size);
13-
NulOStream os;
14-
UNUSED bool ignored=pj.dump_raw_tape(os);
15-
} catch (...) {
16-
}
17-
return 0;
11+
try {
12+
simdjson::dom::parser pj;
13+
auto elem=pj.parse(Data, Size);
14+
auto v=elem.value();
15+
NulOStream os;
16+
UNUSED auto dumpstatus=v.dump_raw_tape(os);
17+
} catch (...) {
18+
}
19+
return 0;
1820
}

fuzz/fuzz_parser.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
#include <string>
55
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
66

7-
auto ignored = simdjson::build_parsed_json(Data, Size);
8-
9-
return 0;
7+
try {
8+
simdjson::dom::parser pj;
9+
auto result=pj.parse(Data, Size);
10+
UNUSED auto v=result.value();
11+
}catch(...) {
12+
}
13+
return 0;
1014
}

fuzz/fuzz_print_json.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88

99
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
1010

11-
try {
12-
auto pj = simdjson::build_parsed_json(Data, Size);
13-
NulOStream os;
14-
bool ignored=pj.print_json(os);
15-
(void)ignored;
16-
} catch (...) {
17-
}
18-
return 0;
11+
try {
12+
simdjson::dom::parser pj;
13+
auto elem=pj.parse(Data, Size);
14+
NulOStream os;
15+
os<<elem;
16+
} catch (...) {
17+
}
18+
return 0;
1919
}

0 commit comments

Comments
 (0)