blob: 5b75c22e6e960eab19d1f310c26b508002948c4f [file] [log] [blame]
Haibo Huangb0bee822021-02-24 15:40:15 -08001// Copyright 2007-2019 The JsonCpp Authors
2// Distributed under MIT license, or public domain if desired and
3// recognized in your jurisdiction.
4// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
5
6#include "fuzz.h"
7
8#include <cstdint>
9#include <json/config.h>
10#include <json/json.h>
11#include <memory>
12#include <string>
13
14namespace Json {
15class Exception;
16}
17
18extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
19 Json::CharReaderBuilder builder;
20
21 if (size < sizeof(uint32_t)) {
22 return 0;
23 }
24
25 const uint32_t hash_settings = static_cast<uint32_t>(data[0]) |
26 (static_cast<uint32_t>(data[1]) << 8) |
27 (static_cast<uint32_t>(data[2]) << 16) |
28 (static_cast<uint32_t>(data[3]) << 24);
29 data += sizeof(uint32_t);
30 size -= sizeof(uint32_t);
31
32 builder.settings_["failIfExtra"] = hash_settings & (1 << 0);
33 builder.settings_["allowComments_"] = hash_settings & (1 << 1);
34 builder.settings_["strictRoot_"] = hash_settings & (1 << 2);
35 builder.settings_["allowDroppedNullPlaceholders_"] = hash_settings & (1 << 3);
36 builder.settings_["allowNumericKeys_"] = hash_settings & (1 << 4);
37 builder.settings_["allowSingleQuotes_"] = hash_settings & (1 << 5);
38 builder.settings_["failIfExtra_"] = hash_settings & (1 << 6);
39 builder.settings_["rejectDupKeys_"] = hash_settings & (1 << 7);
40 builder.settings_["allowSpecialFloats_"] = hash_settings & (1 << 8);
41 builder.settings_["collectComments"] = hash_settings & (1 << 9);
42 builder.settings_["allowTrailingCommas_"] = hash_settings & (1 << 10);
43
44 std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
45
46 Json::Value root;
47 const auto data_str = reinterpret_cast<const char*>(data);
48 try {
49 reader->parse(data_str, data_str + size, &root, nullptr);
50 } catch (Json::Exception const&) {
51 }
52 // Whether it succeeded or not doesn't matter.
53 return 0;
54}