Coverage for /pythoncovmergedfiles/medio/medio/src/Pillow/Tests/oss-fuzz/fuzzers.py: 11%

27 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-10-27 06:38 +0000

1import io 

2import warnings 

3 

4from PIL import Image, ImageDraw, ImageFile, ImageFilter, ImageFont 

5 

6 

7def enable_decompressionbomb_error(): 

8 ImageFile.LOAD_TRUNCATED_IMAGES = True 

9 warnings.filterwarnings("ignore") 

10 warnings.simplefilter("error", Image.DecompressionBombWarning) 

11 

12 

13def disable_decompressionbomb_error(): 

14 ImageFile.LOAD_TRUNCATED_IMAGES = False 

15 warnings.resetwarnings() 

16 

17 

18def fuzz_image(data): 

19 # This will fail on some images in the corpus, as we have many 

20 # invalid images in the test suite. 

21 with Image.open(io.BytesIO(data)) as im: 

22 im.rotate(45) 

23 im.filter(ImageFilter.DETAIL) 

24 im.save(io.BytesIO(), "BMP") 

25 

26 

27def fuzz_font(data): 

28 wrapper = io.BytesIO(data) 

29 try: 

30 font = ImageFont.truetype(wrapper) 

31 except OSError: 

32 # Catch pcf/pilfonts/random garbage here. They return 

33 # different font objects. 

34 return 

35 

36 font.getbbox("ABC") 

37 font.getmask("test text") 

38 with Image.new(mode="RGBA", size=(200, 200)) as im: 

39 draw = ImageDraw.Draw(im) 

40 draw.multiline_textbbox((10, 10), "ABC\nAaaa", font, stroke_width=2) 

41 draw.text((10, 10), "Test Text", font=font, fill="#000")