From 3e817c4298e18c82d2f4bc31926e7c352a329640 Mon Sep 17 00:00:00 2001 From: Mike Aizatsky Date: Wed, 28 Dec 2016 12:01:01 -0800 Subject: [PATCH] [json] using fuzzers from the source repo Thanks @nlohmann for adding them. --- projects/json/Dockerfile | 2 +- projects/json/build.sh | 11 +++--- ...se_fuzzer.options => fuzzer-parse.options} | 0 projects/json/parse_fuzzer.cc | 36 ------------------- 4 files changed, 7 insertions(+), 42 deletions(-) rename projects/json/{parse_fuzzer.options => fuzzer-parse.options} (100%) delete mode 100644 projects/json/parse_fuzzer.cc diff --git a/projects/json/Dockerfile b/projects/json/Dockerfile index e1aaa9c9b..ed491fa5c 100644 --- a/projects/json/Dockerfile +++ b/projects/json/Dockerfile @@ -20,4 +20,4 @@ RUN apt-get install -y binutils gcc RUN git clone --depth 1 -b develop https://github.com/nlohmann/json.git WORKDIR json/ -COPY build.sh parse_fuzzer.* $SRC/ +COPY build.sh *.options $SRC/ diff --git a/projects/json/build.sh b/projects/json/build.sh index c8e563e67..895c138d9 100755 --- a/projects/json/build.sh +++ b/projects/json/build.sh @@ -15,8 +15,9 @@ # ################################################################################ -$CXX $CXXFLAGS -std=c++11 -Isrc/ \ - $SRC/parse_fuzzer.cc -o $OUT/parse_fuzzer \ - -lFuzzingEngine - -cp $SRC/*.options $OUT/ +FUZZER_FILES=$(find -name "fuzzer-parse*.cpp") +for F in $FUZZER_FILES; do + FUZZER=$(basename $F .cpp) + $CXX $CXXFLAGS -std=c++11 -Isrc/ $F -o $OUT/$FUZZER -lFuzzingEngine + cp $SRC/fuzzer-parse.options $OUT/$FUZZER.options +done diff --git a/projects/json/parse_fuzzer.options b/projects/json/fuzzer-parse.options similarity index 100% rename from projects/json/parse_fuzzer.options rename to projects/json/fuzzer-parse.options diff --git a/projects/json/parse_fuzzer.cc b/projects/json/parse_fuzzer.cc deleted file mode 100644 index bb8b3d37c..000000000 --- a/projects/json/parse_fuzzer.cc +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include -#include -#include - -using json = nlohmann::json; - -extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - try { - std::stringstream s; - s << json::parse(data, data + size); - try { - auto j = json::parse(s.str()); - std::stringstream s2; - s2 << j; - assert(s.str() == s2.str()); - assert(j == json::parse(s.str())); - } catch (const std::invalid_argument&) { - assert(0); - } - } catch (const std::invalid_argument&) { } - return 0; -}