1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- """
- 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()
|