|
""" |
|
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.one_of( |
|
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.instrument_all() |
|
atheris.Setup( |
|
sys.argv, |
|
test_schemas.hypothesis.fuzz_one_input, |
|
enable_python_coverage=True, |
|
) |
|
atheris.Fuzz() |
|
|
|
|
|
if __name__ == "__main__": |
|
import atheris |
|
main() |
|
|