Coverage for /pythoncovmergedfiles/medio/medio/src/websockets/fuzzing/fuzz_websocket_parser.py: 51%
37 statements
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-25 06:20 +0000
« prev ^ index » next coverage.py v7.3.1, created at 2023-09-25 06:20 +0000
1###### Coverage stub
2import atexit
3import coverage
4cov = coverage.coverage(data_file='.coverage', cover_pylib=True)
5cov.start()
6# Register an exist handler that will print coverage
7def exit_handler():
8 cov.stop()
9 cov.save()
10atexit.register(exit_handler)
11####### End of coverage stub
12import sys
14import atheris
17with atheris.instrument_imports():
18 from websockets.exceptions import PayloadTooBig, ProtocolError
19 from websockets.frames import Frame
20 from websockets.streams import StreamReader
23def test_one_input(data):
24 fdp = atheris.FuzzedDataProvider(data)
25 mask = fdp.ConsumeBool()
26 max_size_enabled = fdp.ConsumeBool()
27 max_size = fdp.ConsumeInt(4)
28 payload = fdp.ConsumeBytes(atheris.ALL_REMAINING)
30 reader = StreamReader()
31 reader.feed_data(payload)
32 reader.feed_eof()
34 parser = Frame.parse(
35 reader.read_exact,
36 mask=mask,
37 max_size=max_size if max_size_enabled else None,
38 )
40 try:
41 next(parser)
42 except StopIteration as exc:
43 assert isinstance(exc.value, Frame)
44 return # input accepted
45 except (
46 EOFError, # connection is closed without a full WebSocket frame
47 UnicodeDecodeError, # frame contains invalid UTF-8
48 PayloadTooBig, # frame's payload size exceeds ``max_size``
49 ProtocolError, # frame contains incorrect values
50 ):
51 return # input rejected with a documented exception
53 raise RuntimeError("parsing didn't complete")
56def main():
57 atheris.Setup(sys.argv, test_one_input)
58 atheris.Fuzz()
61if __name__ == "__main__":
62 main()