[fuzzer] Rename fuzzing dictionaries for oss-fuzz (#6318)

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.
This commit is contained in:
Vladimir Glavnyy
2020-12-11 05:02:01 +07:00
committed by GitHub
parent 9c9baf6d58
commit 92a806b4e8
7 changed files with 26 additions and 4 deletions

View File

@@ -136,7 +136,7 @@ target_link_libraries(verifier_fuzzer PRIVATE flatbuffers_fuzzed)
add_executable(monster_fuzzer flatbuffers_monster_fuzzer.cc) add_executable(monster_fuzzer flatbuffers_monster_fuzzer.cc)
target_link_libraries(monster_fuzzer PRIVATE flatbuffers_fuzzed) target_link_libraries(monster_fuzzer PRIVATE flatbuffers_fuzzed)
add_custom_command( add_custom_command(
TARGET monster_fuzzer POST_BUILD TARGET monster_fuzzer PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_SOURCE_DIR}/../monster_test.bfbs ${CMAKE_SOURCE_DIR}/../monster_test.bfbs
${CMAKE_CURRENT_BINARY_DIR}/monster_test.bfbs) ${CMAKE_CURRENT_BINARY_DIR}/monster_test.bfbs)

View File

@@ -26,6 +26,9 @@
namespace { 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_strict_json = 0x80;
static constexpr uint8_t flags_skip_unexpected_fields_in_json = 0x40; static constexpr uint8_t flags_skip_unexpected_fields_in_json = 0x40;
static constexpr uint8_t flags_allow_non_utf8 = 0x20; 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); const std::string original(reinterpret_cast<const char *>(data), size);
auto input = std::string(original.c_str()); // until '\0' 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; flatbuffers::IDLOptions opts;
opts.strict_json = (flags & flags_strict_json); opts.strict_json = (flags & flags_strict_json);

View File

@@ -9,6 +9,9 @@
#include "flatbuffers/idl.h" #include "flatbuffers/idl.h"
#include "test_init.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_strict_json = 0x80;
static constexpr uint8_t flags_skip_unexpected_fields_in_json = 0x40; static constexpr uint8_t flags_skip_unexpected_fields_in_json = 0x40;
static constexpr uint8_t flags_allow_non_utf8 = 0x20; 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); const std::string original(reinterpret_cast<const char *>(data), size);
auto input = std::string(original.c_str()); // until '\0' 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; flatbuffers::IDLOptions opts;
opts.strict_json = (flags & flags_strict_json); opts.strict_json = (flags & flags_strict_json);

View File

@@ -27,6 +27,9 @@
#include "flatbuffers/idl.h" #include "flatbuffers/idl.h"
#include "test_init.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_scalar_type = 0x0F; // type of scalar value
static constexpr uint8_t flags_quotes_kind = 0x10; // quote " or ' static constexpr uint8_t flags_quotes_kind = 0x10; // quote " or '
// reserved for future: json {named} or [unnamed] // 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. // Guarantee 0-termination.
const std::string original(reinterpret_cast<const char *>(data), size); const std::string original(reinterpret_cast<const char *>(data), size);
auto input = std::string(original.c_str()); // until '\0' 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. // Break comments in json to avoid complexity with regex matcher.
// The string " 12345 /* text */" will be accepted if insert it to string // The string " 12345 /* text */" will be accepted if insert it to string

View File

@@ -10,6 +10,16 @@
"0x" "0x"
"-0x" "-0x"
"p" "p"
"0"
"1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
"a" "a"
"b" "b"
"c" "c"