diff options
Diffstat (limited to 'projects/json')
-rw-r--r-- | projects/json/Dockerfile | 23 | ||||
-rwxr-xr-x | projects/json/build.sh | 22 | ||||
-rw-r--r-- | projects/json/parse_fuzzer.cc | 36 | ||||
-rw-r--r-- | projects/json/parse_fuzzer.options | 3 | ||||
-rw-r--r-- | projects/json/target.yaml | 1 |
5 files changed, 85 insertions, 0 deletions
diff --git a/projects/json/Dockerfile b/projects/json/Dockerfile new file mode 100644 index 00000000..3d5c6c1a --- /dev/null +++ b/projects/json/Dockerfile @@ -0,0 +1,23 @@ +# 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. +# +################################################################################ + +FROM ossfuzz/base-libfuzzer +MAINTAINER vitalybuka@gmail.com +RUN apt-get install -y binutils gcc + +RUN git clone https://github.com/nlohmann/json.git +WORKDIR json/ +COPY build.sh parse_fuzzer.* $SRC/ diff --git a/projects/json/build.sh b/projects/json/build.sh new file mode 100755 index 00000000..304b7320 --- /dev/null +++ b/projects/json/build.sh @@ -0,0 +1,22 @@ +#!/bin/bash -eu +# 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. +# +################################################################################ + +$CXX $CXXFLAGS -std=c++11 -Isrc/ \ + $SRC/parse_fuzzer.cc -o $OUT/parse_fuzzer \ + -lfuzzer + +cp $SRC/*.options $OUT/ diff --git a/projects/json/parse_fuzzer.cc b/projects/json/parse_fuzzer.cc new file mode 100644 index 00000000..bb8b3d37 --- /dev/null +++ b/projects/json/parse_fuzzer.cc @@ -0,0 +1,36 @@ +// 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 <iostream> +#include <sstream> +#include <json.hpp> + +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; +} diff --git a/projects/json/parse_fuzzer.options b/projects/json/parse_fuzzer.options new file mode 100644 index 00000000..393dd174 --- /dev/null +++ b/projects/json/parse_fuzzer.options @@ -0,0 +1,3 @@ +[libfuzzer] +max_len = 456 +timeout = 10 diff --git a/projects/json/target.yaml b/projects/json/target.yaml new file mode 100644 index 00000000..e5c6f8c3 --- /dev/null +++ b/projects/json/target.yaml @@ -0,0 +1 @@ +homepage: "https://github.com/nlohmann/json" |