From 4ea528929bda82e80444258c118676bc568b5cc7 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Tue, 28 Nov 2023 12:56:32 +0200 Subject: [PATCH] Improve error message when creating TrueType fonts of invalid size Fixes #7583 --- Tests/test_imagefont.py | 6 ++++++ src/PIL/ImageFont.py | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py index db0df047f77..f4f1753519f 100644 --- a/Tests/test_imagefont.py +++ b/Tests/test_imagefont.py @@ -1071,3 +1071,9 @@ def test_raqm_missing_warning(monkeypatch): "Raqm layout was requested, but Raqm is not available. " "Falling back to basic layout." ) + + +@pytest.mark.parametrize("size", [-1, 0]) +def test_invalid_truetype_sizes_raise(size, layout_engine): + with pytest.raises(ValueError): + ImageFont.truetype(FONT_PATH, size, layout_engine=layout_engine) diff --git a/src/PIL/ImageFont.py b/src/PIL/ImageFont.py index c2956213519..901903d827d 100644 --- a/src/PIL/ImageFont.py +++ b/src/PIL/ImageFont.py @@ -788,8 +788,13 @@ def truetype(font=None, size=10, index=0, encoding="", layout_engine=None): .. versionadded:: 4.2.0 :return: A font object. :exception OSError: If the file could not be read. + :exception ValueError: If the size given is invalid. """ + if size <= 0: + msg = "font size must be positive" + raise ValueError(msg) + def freetype(font): return FreeTypeFont(font, size, index, encoding, layout_engine)