summaryrefslogtreecommitdiff
path: root/jsonschema
diff options
context:
space:
mode:
authorJulian Berman <Julian@GrayVines.com>2021-03-02 20:17:53 -0500
committerGitHub <noreply@github.com>2021-03-02 20:17:53 -0500
commitb1772a1f078ef81fab6c97476f64786382acc594 (patch)
treebeb99c7f8a48e40aa9aad6a5f269cda12103e918 /jsonschema
parentb4a33401cbfa2a79787fbc7d5e19206ce01b896e (diff)
parentd9b5ca8c67d9fff9288eabb46809b184e2c5456a (diff)
downloadjsonschema-b1772a1f078ef81fab6c97476f64786382acc594.tar.gz
Merge pull request #772 from DavidKorczynski/main
Added fuzzer to be run with OSS-Fuzz
Diffstat (limited to 'jsonschema')
-rw-r--r--jsonschema/tests/fuzz_validate.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/jsonschema/tests/fuzz_validate.py b/jsonschema/tests/fuzz_validate.py
new file mode 100644
index 0000000..52675d1
--- /dev/null
+++ b/jsonschema/tests/fuzz_validate.py
@@ -0,0 +1,47 @@
+"""
+Fuzzing setup for OSS-Fuzz.
+
+See https://github.com/google/oss-fuzz/tree/master/projects/jsonschema for the
+other half of the setup here.
+"""
+import sys
+
+from hypothesis import given, strategies
+
+import jsonschema
+
+PRIM = strategies.one_of(
+ strategies.booleans(),
+ strategies.integers(),
+ strategies.floats(allow_nan=False, allow_infinity=False),
+ strategies.text(),
+)
+DICT = strategies.recursive(
+ base=(
+ strategies.booleans()
+ | strategies.dictionaries(strategies.text(), PRIM),
+ ),
+ extend=lambda inner: strategies.dictionaries(strategies.text(), inner),
+)
+
+
+@given(obj1=DICT, obj2=DICT)
+def test_schemas(obj1, obj2):
+ try:
+ jsonschema.validate(instance=obj1, schema=obj2)
+ except jsonschema.exceptions.ValidationError:
+ pass
+ except jsonschema.exceptions.SchemaError:
+ pass
+
+
+def main():
+ atheris.Setup(sys.argv,
+ test_schemas.hypothesis.fuzz_one_input,
+ enable_python_coverage=True)
+ atheris.Fuzz()
+
+
+if __name__ == "__main__":
+ import atheris
+ main()