summaryrefslogtreecommitdiff
path: root/json4cpp/tests/src/fuzzer-driver_afl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'json4cpp/tests/src/fuzzer-driver_afl.cpp')
-rw-r--r--json4cpp/tests/src/fuzzer-driver_afl.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/json4cpp/tests/src/fuzzer-driver_afl.cpp b/json4cpp/tests/src/fuzzer-driver_afl.cpp
new file mode 100644
index 0000000000..1cde49bd8a
--- /dev/null
+++ b/json4cpp/tests/src/fuzzer-driver_afl.cpp
@@ -0,0 +1,39 @@
+// __ _____ _____ _____
+// __| | __| | | | JSON for Modern C++ (supporting code)
+// | | |__ | | | | | | version 3.12.0
+// |_____|_____|_____|_|___| https://github.com/nlohmann/json
+//
+// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
+// SPDX-License-Identifier: MIT
+
+/*
+This file implements a driver for American Fuzzy Lop (afl-fuzz). It relies on
+an implementation of the `LLVMFuzzerTestOneInput` function which processes a
+passed byte array.
+*/
+
+#include <vector> // for vector
+#include <cstdint> // for uint8_t
+#include <iostream> // for cin
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size);
+
+int main()
+{
+#ifdef __AFL_HAVE_MANUAL_CONTROL
+ while (__AFL_LOOP(1000))
+ {
+#endif
+ // copy stdin to byte vector
+ std::vector<uint8_t> vec;
+ char c = 0;
+ while (std::cin.get(c))
+ {
+ vec.push_back(static_cast<uint8_t>(c));
+ }
+
+ LLVMFuzzerTestOneInput(vec.data(), vec.size());
+#ifdef __AFL_HAVE_MANUAL_CONTROL
+ }
+#endif
+}