/src/rapidjson-fuzzers/fuzzer.cpp
Line | Count | Source |
1 | | /* By Guido Vranken <guidovranken@gmail.com> */ |
2 | | |
3 | | #include <cstdint> |
4 | | #include <cstddef> |
5 | | #include <string> |
6 | | #include <rapidjson/document.h> |
7 | | #include <rapidjson/prettywriter.h> |
8 | | |
9 | | #ifdef MSAN |
10 | | extern "C" { |
11 | | void __msan_check_mem_is_initialized(const volatile void *x, size_t size); |
12 | | } |
13 | | #endif |
14 | | |
15 | | extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) |
16 | 20 | { |
17 | 20 | const std::string s(data, data + size); |
18 | | |
19 | | /* Parse input to rapidjson::Document */ |
20 | 20 | rapidjson::Document document; |
21 | 20 | rapidjson::ParseResult pr = document.Parse(s.c_str()); |
22 | 20 | if ( !pr ) { |
23 | 11 | return 0; |
24 | 11 | } |
25 | | |
26 | | /* Convert from rapidjson::Document to string */ |
27 | 9 | rapidjson::StringBuffer sb; |
28 | 9 | rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(sb); |
29 | 9 | document.Accept(writer); |
30 | 9 | std::string str = sb.GetString(); |
31 | | #ifdef MSAN |
32 | | if ( str.size() ) { |
33 | | __msan_check_mem_is_initialized(str.data(), str.size()); |
34 | | } |
35 | | #endif |
36 | | |
37 | 9 | return 0; |
38 | 20 | } |