Coverage for /pythoncovmergedfiles/medio/medio/src/python-multipart/fuzz/fuzz_decoders.py: 46%

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

35 statements  

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 sys 

14 

15import atheris 

16from helpers import EnhancedDataProvider 

17 

18with atheris.instrument_imports(): 

19 from multipart.decoders import Base64Decoder, DecodeError, QuotedPrintableDecoder 

20 

21 

22def fuzz_base64_decoder(fdp: EnhancedDataProvider) -> None: 

23 decoder = Base64Decoder(io.BytesIO()) 

24 decoder.write(fdp.ConsumeRandomBytes()) 

25 decoder.finalize() 

26 

27 

28def fuzz_quoted_decoder(fdp: EnhancedDataProvider) -> None: 

29 decoder = QuotedPrintableDecoder(io.BytesIO()) 

30 decoder.write(fdp.ConsumeRandomBytes()) 

31 decoder.finalize() 

32 

33 

34def TestOneInput(data: bytes) -> None: 

35 fdp = EnhancedDataProvider(data) 

36 targets = [fuzz_base64_decoder, fuzz_quoted_decoder] 

37 target = fdp.PickValueInList(targets) 

38 

39 try: 

40 target(fdp) 

41 except DecodeError: 

42 return 

43 

44 

45def main(): 

46 atheris.Setup(sys.argv, TestOneInput) 

47 atheris.Fuzz() 

48 

49 

50if __name__ == "__main__": 

51 main()