summaryrefslogtreecommitdiff
path: root/tomlplusplus/fuzzing/toml_fuzzer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tomlplusplus/fuzzing/toml_fuzzer.cpp')
-rw-r--r--tomlplusplus/fuzzing/toml_fuzzer.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/tomlplusplus/fuzzing/toml_fuzzer.cpp b/tomlplusplus/fuzzing/toml_fuzzer.cpp
new file mode 100644
index 0000000000..2b657f0fec
--- /dev/null
+++ b/tomlplusplus/fuzzing/toml_fuzzer.cpp
@@ -0,0 +1,41 @@
+#include <cstdint>
+#include <fuzzer/FuzzedDataProvider.h>
+
+#include <toml++/toml.hpp>
+
+enum class SerializationTest
+{
+ NONE = 0,
+ JSON,
+ YAML,
+ TOML,
+ kMaxValue = TOML
+};
+
+extern "C" int LLVMFuzzerTestOneInput(const std::uint8_t* data, const std::size_t size)
+{
+ FuzzedDataProvider fdp{data, size};
+ try
+ {
+ const toml::table tbl = toml::parse(fdp.ConsumeRandomLengthString());
+
+ switch (fdp.ConsumeEnum<SerializationTest>())
+ {
+ case SerializationTest::JSON:
+ static_cast<void>(toml::json_formatter{tbl});
+ break;
+ case SerializationTest::YAML:
+ static_cast<void>(toml::yaml_formatter{tbl});
+ break;
+ case SerializationTest::TOML:
+ static_cast<void>(toml::toml_formatter{tbl});
+ default:
+ break;
+ }
+ }
+ catch (const toml::parse_error&)
+ {
+ return -1;
+ }
+ return 0;
+}