diff options
author | Julian Berman <Julian@GrayVines.com> | 2021-03-02 20:17:53 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-02 20:17:53 -0500 |
commit | b1772a1f078ef81fab6c97476f64786382acc594 (patch) | |
tree | beb99c7f8a48e40aa9aad6a5f269cda12103e918 /jsonschema | |
parent | b4a33401cbfa2a79787fbc7d5e19206ce01b896e (diff) | |
parent | d9b5ca8c67d9fff9288eabb46809b184e2c5456a (diff) | |
download | jsonschema-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.py | 47 |
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() |