From 1baf141146fdc46262460d8ca8617f1e46d29969 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 19 Jan 2026 17:13:43 +1100 Subject: [PATCH 1/3] Check that _EXTENSION_PLUGIN contains all registered extensions --- Tests/test_image.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Tests/test_image.py b/Tests/test_image.py index afc6e8e16..c064939e8 100644 --- a/Tests/test_image.py +++ b/Tests/test_image.py @@ -466,6 +466,9 @@ class TestImage: # Assert assert Image._initialized == 2 + for extension in Image.EXTENSION: + assert extension in Image._EXTENSION_PLUGIN + def test_registered_extensions(self) -> None: # Arrange # Open an image to trigger plugin registration From 9c8059fdea6d4272b9eacc2eeb05dc32efe40d4f Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 19 Jan 2026 17:18:30 +1100 Subject: [PATCH 2/3] Cleanup .spider extension registered by test code during save --- Tests/test_file_spider.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/test_file_spider.py b/Tests/test_file_spider.py index 3b3c3b4a5..03494523b 100644 --- a/Tests/test_file_spider.py +++ b/Tests/test_file_spider.py @@ -14,6 +14,10 @@ from .helper import assert_image_equal, hopper, is_pypy TEST_FILE = "Tests/images/hopper.spider" +def teardown_module() -> None: + del Image.EXTENSION[".spider"] + + def test_sanity() -> None: with Image.open(TEST_FILE) as im: im.load() From b06118c2b3287d8061162c3bb90f2b672a5713e3 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 19 Jan 2026 17:24:28 +1100 Subject: [PATCH 3/3] Do not register empty extension --- src/PIL/SpiderImagePlugin.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PIL/SpiderImagePlugin.py b/src/PIL/SpiderImagePlugin.py index 866292243..848dccda5 100644 --- a/src/PIL/SpiderImagePlugin.py +++ b/src/PIL/SpiderImagePlugin.py @@ -290,9 +290,9 @@ def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: def _save_spider(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: # get the filename extension and register it with Image - filename_ext = os.path.splitext(filename)[1] - ext = filename_ext.decode() if isinstance(filename_ext, bytes) else filename_ext - Image.register_extension(SpiderImageFile.format, ext) + if filename_ext := os.path.splitext(filename)[1]: + ext = filename_ext.decode() if isinstance(filename_ext, bytes) else filename_ext + Image.register_extension(SpiderImageFile.format, ext) _save(im, fp, filename)