From bd4826591b4a9d9fdfee1528488296810daef42c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 18 Oct 2022 20:59:22 +1100 Subject: [PATCH] Removed INVALID enum --- Tests/images/unimplemented_fourcc.dds | Bin 0 -> 32896 bytes Tests/images/unimplemented_pfflags.dds | Bin 0 -> 32896 bytes ...nted_pixel_format.dds => unknown_fourcc.dds} | Bin Tests/test_file_dds.py | 13 +++++++++++-- src/PIL/DdsImagePlugin.py | 15 ++++----------- 5 files changed, 15 insertions(+), 13 deletions(-) create mode 100755 Tests/images/unimplemented_fourcc.dds create mode 100755 Tests/images/unimplemented_pfflags.dds rename Tests/images/{unimplemented_pixel_format.dds => unknown_fourcc.dds} (100%) diff --git a/Tests/images/unimplemented_fourcc.dds b/Tests/images/unimplemented_fourcc.dds new file mode 100755 index 0000000000000000000000000000000000000000..4795573646b08ff503908e2d50ccb3a5b6bf0863 GIT binary patch literal 32896 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 Zf8OR^GO=}gj=(gg2&mz%@jM&z{vSC0Wu^cC literal 0 HcmV?d00001 diff --git a/Tests/images/unimplemented_pfflags.dds b/Tests/images/unimplemented_pfflags.dds new file mode 100755 index 0000000000000000000000000000000000000000..e3fc8344d2870490de5dfc6003d96b1afa3be8f2 GIT binary patch literal 32896 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 YZSEx#Tes&3Ok;|G8txj;voY`g0Xf`dssI20 literal 0 HcmV?d00001 diff --git a/Tests/images/unimplemented_pixel_format.dds b/Tests/images/unknown_fourcc.dds similarity index 100% rename from Tests/images/unimplemented_pixel_format.dds rename to Tests/images/unknown_fourcc.dds diff --git a/Tests/test_file_dds.py b/Tests/test_file_dds.py index 98d03e3ca..004a2d156 100644 --- a/Tests/test_file_dds.py +++ b/Tests/test_file_dds.py @@ -289,9 +289,18 @@ def test_dxt5_colorblock_alpha_issue_4142(): assert px[2] != 0 -def test_unimplemented_pixel_format(): +@pytest.mark.parametrize( + "test_file", + ( + "Tests/images/unknown_fourcc.dds", + "Tests/images/unimplemented_fourcc.dds", + "Tests/images/unimplemented_dxgi_format.dds", + "Tests/images/unimplemented_pfflags.dds", + ), +) +def test_not_implemented(test_file): with pytest.raises(NotImplementedError): - with Image.open("Tests/images/unimplemented_pixel_format.dds"): + with Image.open(test_file): pass diff --git a/src/PIL/DdsImagePlugin.py b/src/PIL/DdsImagePlugin.py index 69bfb8f2a..6e9e1cada 100644 --- a/src/PIL/DdsImagePlugin.py +++ b/src/PIL/DdsImagePlugin.py @@ -184,11 +184,6 @@ class DXGI_FORMAT(IntEnum): V408 = 132 SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 133 SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 134 - INVALID = -1 - - @classmethod - def _missing_(cls, value: object): - return cls.INVALID class D3DFMT(IntEnum): @@ -262,11 +257,6 @@ class D3DFMT(IntEnum): ATI1 = i32(b"ATI1") ATI2 = i32(b"ATI2") MULTI2_ARGB8 = i32(b"MET1") - INVALID = -1 - - @classmethod - def _missing_(cls, value: object): - return cls.INVALID class DdsImageFile(ImageFile.ImageFile): @@ -297,7 +287,6 @@ class DdsImageFile(ImageFile.ImageFile): # pixel format pfsize, pfflags_, fourcc_, bitcount = struct.unpack("<4I", header.read(16)) pfflags = DDPF(pfflags_) - fourcc = D3DFMT(fourcc_) masks = struct.unpack("<4I", header.read(16)) if flags & DDSD.CAPS: header.seek(20, io.SEEK_CUR) @@ -333,6 +322,10 @@ class DdsImageFile(ImageFile.ImageFile): raise OSError(msg) elif pfflags & DDPF.FOURCC: data_offs = header_size + 4 + try: + fourcc = D3DFMT(fourcc_) + except ValueError: + raise NotImplementedError(f"Unimplemented pixel format {repr(fourcc_)}") if fourcc == D3DFMT.DXT1: self.mode = "RGBA" self.pixel_format = "DXT1"