mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-26 17:24:31 +03:00
Test PILfont even when FreeType is supported
This commit is contained in:
parent
8676cbd4e7
commit
ecd3948b45
|
@ -1,14 +1,22 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
import struct
|
||||||
import pytest
|
import pytest
|
||||||
|
from io import BytesIO
|
||||||
|
|
||||||
from PIL import Image, ImageDraw, ImageFont, features
|
from PIL import Image, ImageDraw, ImageFont, features, _util
|
||||||
|
|
||||||
from .helper import assert_image_equal_tofile
|
from .helper import assert_image_equal_tofile
|
||||||
|
|
||||||
pytestmark = pytest.mark.skipif(
|
original_core = ImageFont.core
|
||||||
features.check_module("freetype2"),
|
|
||||||
reason="PILfont superseded if FreeType is supported",
|
|
||||||
)
|
def setup_module():
|
||||||
|
if features.check_module("freetype2"):
|
||||||
|
ImageFont.core = _util.DeferredError(ImportError)
|
||||||
|
|
||||||
|
|
||||||
|
def teardown_module():
|
||||||
|
ImageFont.core = original_core
|
||||||
|
|
||||||
|
|
||||||
def test_default_font():
|
def test_default_font():
|
||||||
|
@ -44,3 +52,23 @@ def test_textbbox():
|
||||||
default_font = ImageFont.load_default()
|
default_font = ImageFont.load_default()
|
||||||
assert d.textlength("test", font=default_font) == 24
|
assert d.textlength("test", font=default_font) == 24
|
||||||
assert d.textbbox((0, 0), "test", font=default_font) == (0, 0, 24, 11)
|
assert d.textbbox((0, 0), "test", font=default_font) == (0, 0, 24, 11)
|
||||||
|
|
||||||
|
|
||||||
|
def test_decompression_bomb():
|
||||||
|
glyph = struct.pack(">hhhhhhhhhh", 1, 0, 0, 0, 256, 256, 0, 0, 256, 256)
|
||||||
|
fp = BytesIO(b"PILfont\n\nDATA\n" + glyph * 256)
|
||||||
|
|
||||||
|
font = ImageFont.ImageFont()
|
||||||
|
font._load_pilfont_data(fp, Image.new("L", (256, 256)))
|
||||||
|
with pytest.raises(Image.DecompressionBombError):
|
||||||
|
font.getmask("A" * 1_000_000)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.timeout(4)
|
||||||
|
def test_oom():
|
||||||
|
glyph = struct.pack(">hhhhhhhhhh", 1, 0, 0, 0, 32767, 32767, 0, 0, 32767, 32767)
|
||||||
|
fp = BytesIO(b"PILfont\n\nDATA\n" + glyph * 256)
|
||||||
|
|
||||||
|
font = ImageFont.ImageFont()
|
||||||
|
font._load_pilfont_data(fp, Image.new("L", (1, 1)))
|
||||||
|
font.getmask("A" * 1_000_000)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user