Skip to content

Commit 92bafe6

Browse files
committed
Removed support for FreeType <= 2.9.0
1 parent aaf217c commit 92bafe6

File tree

3 files changed

+18
-71
lines changed

3 files changed

+18
-71
lines changed

Tests/test_imagefont.py

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from typing import Any, BinaryIO
1212

1313
import pytest
14-
from packaging.version import parse as parse_version
1514

1615
from PIL import Image, ImageDraw, ImageFont, features
1716
from PIL._typing import StrOrBytesPath
@@ -691,16 +690,6 @@ def test_complex_font_settings() -> None:
691690

692691

693692
def test_variation_get(font: ImageFont.FreeTypeFont) -> None:
694-
version = features.version_module("freetype2")
695-
assert version is not None
696-
freetype = parse_version(version)
697-
if freetype < parse_version("2.9.1"):
698-
with pytest.raises(NotImplementedError):
699-
font.get_variation_names()
700-
with pytest.raises(NotImplementedError):
701-
font.get_variation_axes()
702-
return
703-
704693
with pytest.raises(OSError):
705694
font.get_variation_names()
706695
with pytest.raises(OSError):
@@ -763,14 +752,6 @@ def _check_text(font: ImageFont.FreeTypeFont, path: str, epsilon: float) -> None
763752

764753

765754
def test_variation_set_by_name(font: ImageFont.FreeTypeFont) -> None:
766-
version = features.version_module("freetype2")
767-
assert version is not None
768-
freetype = parse_version(version)
769-
if freetype < parse_version("2.9.1"):
770-
with pytest.raises(NotImplementedError):
771-
font.set_variation_by_name("Bold")
772-
return
773-
774755
with pytest.raises(OSError):
775756
font.set_variation_by_name("Bold")
776757

@@ -790,14 +771,6 @@ def test_variation_set_by_name(font: ImageFont.FreeTypeFont) -> None:
790771

791772

792773
def test_variation_set_by_axes(font: ImageFont.FreeTypeFont) -> None:
793-
version = features.version_module("freetype2")
794-
assert version is not None
795-
freetype = parse_version(version)
796-
if freetype < parse_version("2.9.1"):
797-
with pytest.raises(NotImplementedError):
798-
font.set_variation_by_axes([100])
799-
return
800-
801774
with pytest.raises(OSError):
802775
font.set_variation_by_axes([500, 50])
803776

@@ -1209,15 +1182,3 @@ def test_invalid_truetype_sizes_raise_valueerror(
12091182
) -> None:
12101183
with pytest.raises(ValueError):
12111184
ImageFont.truetype(FONT_PATH, size, layout_engine=layout_engine)
1212-
1213-
1214-
def test_freetype_deprecation(monkeypatch: pytest.MonkeyPatch) -> None:
1215-
# Arrange: mock features.version_module to return fake FreeType version
1216-
def fake_version_module(module: str) -> str:
1217-
return "2.9.0"
1218-
1219-
monkeypatch.setattr(features, "version_module", fake_version_module)
1220-
1221-
# Act / Assert
1222-
with pytest.warns(DeprecationWarning, match="FreeType 2.9.0"):
1223-
ImageFont.truetype(FONT_PATH, FONT_SIZE)

docs/deprecations.rst

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,6 @@ ImageDraw.getdraw hints parameter
1919

2020
The ``hints`` parameter in :py:meth:`~PIL.ImageDraw.getdraw()` has been deprecated.
2121

22-
FreeType 2.9.0
23-
^^^^^^^^^^^^^^
24-
25-
.. deprecated:: 11.0.0
26-
27-
Support for FreeType 2.9.0 is deprecated and will be removed in Pillow 12.0.0
28-
(2025-10-15), when FreeType 2.9.1 will be the minimum supported.
29-
30-
We recommend upgrading to at least FreeType `2.10.4`_, which fixed a severe
31-
vulnerability introduced in FreeType 2.6 (:cve:`2020-15999`).
32-
33-
.. _2.10.4: https://sourceforge.net/projects/freetype/files/freetype2/2.10.4/
34-
3522
ExifTags.IFD.Makernote
3623
^^^^^^^^^^^^^^^^^^^^^^
3724

@@ -79,7 +66,7 @@ Deprecated features are only removed in major releases after an appropriate
7966
period of deprecation has passed.
8067

8168
ImageFile.raise_oserror
82-
~~~~~~~~~~~~~~~~~~~~~~~
69+
^^^^^^^^^^^^^^^^^^^^^^^
8370

8471
.. deprecated:: 10.2.0
8572
.. versionremoved:: 12.0.0
@@ -89,7 +76,7 @@ only useful for translating error codes returned by a codec's ``decode()`` metho
8976
which ImageFile already did automatically.
9077

9178
IptcImageFile helper functions
92-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9380

9481
.. deprecated:: 10.2.0
9582
.. versionremoved:: 12.0.0
@@ -100,7 +87,7 @@ intended for internal use, so there is no replacement. They can each be replaced
10087
single line of code using builtin functions in Python.
10188

10289
ImageCms constants and versions() function
103-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10491

10592
.. deprecated:: 10.3.0
10693
.. versionremoved:: 12.0.0
@@ -181,6 +168,20 @@ ImageDraw.getdraw hints parameter
181168

182169
The ``hints`` parameter in :py:meth:`~PIL.ImageDraw.getdraw()` has been removed.
183170

171+
FreeType 2.9.0
172+
^^^^^^^^^^^^^^
173+
174+
.. deprecated:: 11.0.0
175+
.. versionremoved:: 12.0.0
176+
177+
Support for FreeType 2.9.0 has been removed. FreeType 2.9.1 is the minimum version
178+
supported.
179+
180+
We recommend upgrading to at least FreeType `2.10.4`_, which fixed a severe
181+
vulnerability introduced in FreeType 2.6 (:cve:`2020-15999`).
182+
183+
.. _2.10.4: https://sourceforge.net/projects/freetype/files/freetype2/2.10.4/
184+
184185
ICNS (width, height, scale) sizes
185186
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
186187

src/PIL/ImageFont.py

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from types import ModuleType
3737
from typing import IO, Any, BinaryIO, TypedDict, cast
3838

39-
from . import Image, features
39+
from . import Image
4040
from ._typing import StrOrBytesPath
4141
from ._util import DeferredError, is_path
4242

@@ -236,21 +236,6 @@ def __init__(
236236
self.index = index
237237
self.encoding = encoding
238238

239-
try:
240-
from packaging.version import parse as parse_version
241-
except ImportError:
242-
pass
243-
else:
244-
if freetype_version := features.version_module("freetype2"):
245-
if parse_version(freetype_version) < parse_version("2.9.1"):
246-
warnings.warn(
247-
"Support for FreeType 2.9.0 is deprecated and will be removed "
248-
"in Pillow 12 (2025-10-15). Please upgrade to FreeType 2.9.1 "
249-
"or newer, preferably FreeType 2.10.4 which fixes "
250-
"CVE-2020-15999.",
251-
DeprecationWarning,
252-
)
253-
254239
if layout_engine not in (Layout.BASIC, Layout.RAQM):
255240
layout_engine = Layout.BASIC
256241
if core.HAVE_RAQM:

0 commit comments

Comments
 (0)