Coverage for /pythoncovmergedfiles/medio/medio/src/pdfminer.six/fuzzing/extract_text_fuzzer.py: 30%

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

27 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 sys 

13 

14import atheris 

15 

16from fuzzing.fuzzed_data_provider import PdfminerFuzzedDataProvider 

17 

18with atheris.instrument_imports(): 

19 from fuzzing.utils import ( 

20 generate_layout_parameters, 

21 is_valid_byte_stream, 

22 prepare_pdfminer_fuzzing, 

23 ) 

24 from pdfminer.high_level import extract_text 

25 

26from 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 extract_text( 

38 fdp.ConsumeMemoryFile(), 

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

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

41 laparams=generate_layout_parameters(fdp), 

42 ) 

43 except (AssertionError, PSException): 

44 return 

45 

46 

47if __name__ == "__main__": 

48 prepare_pdfminer_fuzzing() 

49 atheris.Setup(sys.argv, fuzz_one_input) 

50 atheris.Fuzz()