[fuzzer] Rename fuzzing dictionaries for `oss-fuzz` (#6318)
authorVladimir Glavnyy <31897320+vglavnyy@users.noreply.github.com>
Thu, 10 Dec 2020 22:02:01 +0000 (05:02 +0700)
committerGitHub <noreply@github.com>
Thu, 10 Dec 2020 22:02:01 +0000 (14:02 -0800)
This commit makes the names of fuzzing dictionaries the same as the target binary names.
Also it explicitly limits size of test inputs to prevent failures in `regex` and fuzzing time-outs.

tests/fuzzer/CMakeLists.txt
tests/fuzzer/flatbuffers_monster_fuzzer.cc
tests/fuzzer/flatbuffers_parser_fuzzer.cc
tests/fuzzer/flatbuffers_scalar_fuzzer.cc
tests/fuzzer/monster_fuzzer.dict [moved from tests/fuzzer/monster_json.dict with 100% similarity]
tests/fuzzer/parser_fuzzer.dict [moved from tests/fuzzer/parser_fbs.dict with 100% similarity]
tests/fuzzer/scalar_fuzzer.dict [moved from tests/fuzzer/scalar_json.dict with 79% similarity]

index 85eddf8..a171eb0 100644 (file)
@@ -136,7 +136,7 @@ target_link_libraries(verifier_fuzzer PRIVATE flatbuffers_fuzzed)
 add_executable(monster_fuzzer flatbuffers_monster_fuzzer.cc)
 target_link_libraries(monster_fuzzer PRIVATE flatbuffers_fuzzed)
 add_custom_command(
-  TARGET monster_fuzzer POST_BUILD
+  TARGET monster_fuzzer PRE_BUILD
   COMMAND ${CMAKE_COMMAND} -E copy
   ${CMAKE_SOURCE_DIR}/../monster_test.bfbs
   ${CMAKE_CURRENT_BINARY_DIR}/monster_test.bfbs)
index 13bdef9..2b05048 100644 (file)
@@ -26,6 +26,9 @@
 
 namespace {
 
+static constexpr size_t kMinInputLength = 1;
+static constexpr size_t kMaxInputLength = 99000;
+
 static constexpr uint8_t flags_strict_json = 0x80;
 static constexpr uint8_t flags_skip_unexpected_fields_in_json = 0x40;
 static constexpr uint8_t flags_allow_non_utf8 = 0x20;
@@ -83,7 +86,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 
   const std::string original(reinterpret_cast<const char *>(data), size);
   auto input = std::string(original.c_str());  // until '\0'
-  if (input.empty()) return 0;
+  if (input.size() < kMinInputLength || input.size() > kMaxInputLength)
+    return 0;
 
   flatbuffers::IDLOptions opts;
   opts.strict_json = (flags & flags_strict_json);
index 26f9e9f..d4bbb0e 100644 (file)
@@ -9,6 +9,9 @@
 #include "flatbuffers/idl.h"
 #include "test_init.h"
 
+static constexpr size_t kMinInputLength = 1;
+static constexpr size_t kMaxInputLength = 33000;
+
 static constexpr uint8_t flags_strict_json = 0x80;
 static constexpr uint8_t flags_skip_unexpected_fields_in_json = 0x40;
 static constexpr uint8_t flags_allow_non_utf8 = 0x20;
@@ -26,7 +29,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 
   const std::string original(reinterpret_cast<const char *>(data), size);
   auto input = std::string(original.c_str());  // until '\0'
-  if (input.empty()) return 0;
+  if (input.size() < kMinInputLength || input.size() > kMaxInputLength)
+    return 0;
 
   flatbuffers::IDLOptions opts;
   opts.strict_json = (flags & flags_strict_json);
index fd128a3..faa069e 100644 (file)
@@ -27,6 +27,9 @@
 #include "flatbuffers/idl.h"
 #include "test_init.h"
 
+static constexpr size_t kMinInputLength = 1;
+static constexpr size_t kMaxInputLength = 3000;
+
 static constexpr uint8_t flags_scalar_type = 0x0F;  // type of scalar value
 static constexpr uint8_t flags_quotes_kind = 0x10;  // quote " or '
 // reserved for future: json {named} or [unnamed]
@@ -241,7 +244,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   // Guarantee 0-termination.
   const std::string original(reinterpret_cast<const char *>(data), size);
   auto input = std::string(original.c_str());  // until '\0'
-  if (input.empty()) return 0;
+  if (input.size() < kMinInputLength || input.size() > kMaxInputLength)
+    return 0;
 
   // Break comments in json to avoid complexity with regex matcher.
   // The string " 12345 /* text */" will be accepted if insert it to string
similarity index 79%
rename from tests/fuzzer/scalar_json.dict
rename to tests/fuzzer/scalar_fuzzer.dict
index 7558dc3..3b2fbc8 100644 (file)
 "0x"
 "-0x"
 "p"
+"0"
+"1"
+"2"
+"3"
+"4"
+"5"
+"6"
+"7"
+"8"
+"9"
 "a"
 "b"
 "c"