You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
"""
 | 
						|
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()
 |