/*
    __ _____ _____ _____
 __|  |   __|     |   | |  JSON for Modern C++ (fuzz test support)
|  |  |__   |  |  | | | |  version 2.0.10
|_____|_____|_____|_|___|  https://github.com/nlohmann/json

This file implements a parser test suitable for fuzz testing. Given a byte
array data, it performs the following steps:

- j1 = parse(data)
- s1 = serialize(j1)
- j2 = parse(s1)
- s2 = serialize(j2)
- assert(s1 == s2)

The provided function `LLVMFuzzerTestOneInput` can be used in different fuzzer
drivers.

Licensed under the MIT License <http://opensource.org/licenses/MIT>.
*/

#include <iostream>
#include <sstream>
#include <json.hpp>

using json = nlohmann::json;

// see http://llvm.org/docs/LibFuzzer.html
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{
    try
    {
        // step 1: parse input
        json j1 = json::parse(data, data + size);

        try
        {
            // step 2: round trip

            // first serialization
            std::string s1 = j1.dump();

            // parse serialization
            json j2 = json::parse(s1);

            // second serialization
            std::string s2 = j2.dump();

            // serializations must match
            assert(s1 == s2);
        }
        catch (const std::invalid_argument&)
        {
            // parsing a JSON serialization must not fail
            assert(false);
        }
    }
    catch (const std::invalid_argument&)
    {
        // parse errors are ok, because input may be random bytes
    }

    // return 0 - non-zero return values are reserved for future use
    return 0;
}
