mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 01:46:18 +03:00
Fix null pointer dereference crash with malformed font
This commit is contained in:
parent
7f1708415c
commit
87d1770c18
10
Tests/fonts/fuzz_font-5203009437302784
Normal file
10
Tests/fonts/fuzz_font-5203009437302784
Normal file
|
@ -0,0 +1,10 @@
|
|||
STARTFONT
|
||||
FONT ÿ
|
||||
SIZE 10
|
||||
FONTBOUNDINGBOX
|
||||
CHARS
|
||||
STARTCHAR
|
||||
ENCODING
|
||||
BBX 2 5
|
||||
ENDCHAR
|
||||
ENDFONT
|
21
Tests/test_font_crash.py
Normal file
21
Tests/test_font_crash.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
import pytest
|
||||
|
||||
from .helper import skip_unless_feature
|
||||
|
||||
class TestFontCrash:
|
||||
def _fuzz_font(self, font):
|
||||
# from fuzzers.fuzz_font
|
||||
font.getbbox("ABC")
|
||||
font.getmask("test text")
|
||||
with Image.new(mode="RGBA", size=(200, 200)) as im:
|
||||
draw = ImageDraw.Draw(im)
|
||||
draw.multiline_textbbox((10, 10), "ABC\nAaaa", font, stroke_width=2)
|
||||
draw.text((10, 10), "Test Text", font=font, fill="#000")
|
||||
|
||||
@skip_unless_feature("freetype2")
|
||||
def test_segfault(self):
|
||||
with pytest.raises(OSError):
|
||||
font= ImageFont.truetype('Tests/fonts/fuzz_font-5203009437302784')
|
||||
self._fuzz_font(font)
|
|
@ -921,6 +921,12 @@ font_render(FontObject *self, PyObject *args) {
|
|||
yy = -(py + glyph_slot->bitmap_top);
|
||||
}
|
||||
|
||||
// Null buffer, is dereferenced in FT_Bitmap_Convert
|
||||
if (!bitmap.buffer && bitmap.rows) {
|
||||
return geterror(0x9D); // Bitmap missing
|
||||
goto glyph_error;
|
||||
}
|
||||
|
||||
/* convert non-8bpp bitmaps */
|
||||
switch (bitmap.pixel_mode) {
|
||||
case FT_PIXEL_MODE_MONO:
|
||||
|
|
Loading…
Reference in New Issue
Block a user