Coverage for /pythoncovmergedfiles/medio/medio/src/python-multipart/fuzz/fuzz_decoders.py: 56%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
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 io
13import logging
14import sys
16logging.disable(logging.CRITICAL)
18import atheris
19from helpers import EnhancedDataProvider
21with atheris.instrument_imports():
22 from python_multipart.decoders import Base64Decoder, DecodeError, QuotedPrintableDecoder
25def fuzz_base64_decoder(fdp: EnhancedDataProvider) -> None:
26 decoder = Base64Decoder(io.BytesIO())
27 decoder.write(fdp.ConsumeRandomBytes())
28 decoder.finalize()
31def fuzz_base64_decoder_chunked(fdp: EnhancedDataProvider) -> None:
32 decoder = Base64Decoder(io.BytesIO())
33 num_chunks = fdp.ConsumeIntInRange(1, 8)
34 body = fdp.ConsumeRandomBytes()
35 chunk_size = max(1, (len(body) + num_chunks - 1) // num_chunks)
36 for i in range(0, len(body), chunk_size):
37 decoder.write(body[i : i + chunk_size])
38 decoder.finalize()
41def fuzz_quoted_decoder(fdp: EnhancedDataProvider) -> None:
42 decoder = QuotedPrintableDecoder(io.BytesIO())
43 decoder.write(fdp.ConsumeRandomBytes())
44 decoder.finalize()
47def fuzz_quoted_decoder_chunked(fdp: EnhancedDataProvider) -> None:
48 decoder = QuotedPrintableDecoder(io.BytesIO())
49 num_chunks = fdp.ConsumeIntInRange(1, 8)
50 body = fdp.ConsumeRandomBytes()
51 chunk_size = max(1, (len(body) + num_chunks - 1) // num_chunks)
52 for i in range(0, len(body), chunk_size):
53 decoder.write(body[i : i + chunk_size])
54 decoder.finalize()
57def TestOneInput(data: bytes) -> None:
58 fdp = EnhancedDataProvider(data)
59 targets = [
60 fuzz_base64_decoder,
61 fuzz_base64_decoder_chunked,
62 fuzz_quoted_decoder,
63 fuzz_quoted_decoder_chunked,
64 ]
65 target = fdp.PickValueInList(targets)
67 try:
68 target(fdp)
69 except DecodeError:
70 return
73def main():
74 atheris.Setup(sys.argv, TestOneInput)
75 atheris.Fuzz()
78if __name__ == "__main__":
79 main()