Coverage for /pythoncovmergedfiles/medio/medio/src/pikepdf/fuzzing/pikepdf_fuzzer.py: 23%

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

43 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# SPDX-FileCopyrightText: 2024 ennamarie19 

13# SPDX-License-Identifier: MIT 

14 

15import io 

16import sys 

17from contextlib import contextmanager 

18 

19import atheris 

20from fuzz_helpers import EnhancedFuzzedDataProvider 

21 

22with atheris.instrument_imports(exclude=['pikepdf.settings']): 

23 import pikepdf 

24 from pikepdf import PdfError # type: ignore 

25 

26 

27@contextmanager 

28def silence(): 

29 so = sys.stdout 

30 se = sys.stderr 

31 sys.stdout = io.StringIO() 

32 sys.stderr = io.StringIO() 

33 yield 

34 sys.stdout = so 

35 sys.stderr = se 

36 

37 

38def TestOneInput(data): 

39 fdp = EnhancedFuzzedDataProvider(data) 

40 try: 

41 with fdp.ConsumeMemoryFile(all_data=True) as pdf_f, io.BytesIO() as out_f: 

42 with pikepdf.Pdf.open(pdf_f) as my_pdf: 

43 for page in my_pdf.pages: 

44 page.rotate(180, relative=True) 

45 my_pdf.save(out_f) 

46 except PdfError: 

47 return -1 

48 except SystemError: 

49 return -1 

50 

51 

52def main(): 

53 atheris.Setup(sys.argv, TestOneInput) 

54 atheris.Fuzz() 

55 

56 

57if __name__ == "__main__": 

58 main()