Coverage for /pythoncovmergedfiles/medio/medio/src/pdfminer.six/fuzzing/page_extraction_fuzzer.py: 32%

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

28 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 

12#!/usr/bin/env python3 

13import sys 

14 

15import atheris 

16 

17from fuzzing.fuzzed_data_provider import PdfminerFuzzedDataProvider 

18 

19with atheris.instrument_imports(): 

20 from fuzzing.utils import ( 

21 generate_layout_parameters, 

22 is_valid_byte_stream, 

23 prepare_pdfminer_fuzzing, 

24 ) 

25 from pdfminer.high_level import extract_pages 

26 from pdfminer.psexceptions import PSException 

27 

28 

29def fuzz_one_input(data: bytes) -> None: 

30 if not is_valid_byte_stream(data): 

31 # Not worth continuing with this test case 

32 return 

33 

34 fdp = PdfminerFuzzedDataProvider(data) 

35 

36 try: 

37 with fdp.ConsumeMemoryFile() as f: 

38 list( 

39 extract_pages( 

40 f, 

41 maxpages=fdp.ConsumeIntInRange(0, 10), 

42 page_numbers=fdp.ConsumeOptionalIntList(10, 0, 10), 

43 laparams=generate_layout_parameters(fdp), 

44 ), 

45 ) 

46 except (AssertionError, PSException): 

47 return 

48 

49 

50if __name__ == "__main__": 

51 prepare_pdfminer_fuzzing() 

52 atheris.Setup(sys.argv, fuzz_one_input) 

53 atheris.Fuzz()