aboutsummaryrefslogtreecommitdiffhomepage
path: root/projects/json
diff options
context:
space:
mode:
Diffstat (limited to 'projects/json')
-rw-r--r--projects/json/Dockerfile23
-rwxr-xr-xprojects/json/build.sh22
-rw-r--r--projects/json/parse_fuzzer.cc36
-rw-r--r--projects/json/parse_fuzzer.options3
-rw-r--r--projects/json/target.yaml1
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"