Coverage Report

Created: 2024-07-27 06:10

/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
}