Skip to content

Commit 180c89f

Browse files
authored
Merge pull request #6092 from radarhere/accept
2 parents 6b9f854 + 633abcb commit 180c89f

File tree

12 files changed

+49
-23
lines changed

12 files changed

+49
-23
lines changed

Tests/test_file_dds.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,13 @@ def test__accept_false():
196196
assert not output
197197

198198

199+
def test_invalid_file():
200+
invalid_file = "Tests/images/flower.jpg"
201+
202+
with pytest.raises(SyntaxError):
203+
DdsImagePlugin.DdsImageFile(invalid_file)
204+
205+
199206
def test_short_header():
200207
"""Check a short header"""
201208
with open(TEST_FILE_DXT5, "rb") as f:

Tests/test_file_ftex.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ def test_load_dxt1():
1616
assert_image_similar(im, target.convert("RGBA"), 15)
1717

1818

19+
def test_invalid_file():
20+
invalid_file = "Tests/images/flower.jpg"
21+
22+
with pytest.raises(SyntaxError):
23+
FtexImagePlugin.FtexImageFile(invalid_file)
24+
25+
1926
def test_constants_deprecation():
2027
for enum, prefix in {
2128
FtexImagePlugin.Format: "FORMAT_",

Tests/test_file_xbm.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pytest
44

5-
from PIL import Image
5+
from PIL import Image, XbmImagePlugin
66

77
from .helper import hopper
88

@@ -63,6 +63,13 @@ def test_open_filename_with_underscore():
6363
assert im.size == (128, 128)
6464

6565

66+
def test_invalid_file():
67+
invalid_file = "Tests/images/flower.jpg"
68+
69+
with pytest.raises(SyntaxError):
70+
XbmImagePlugin.XbmImageFile(invalid_file)
71+
72+
6673
def test_save_wrong_mode(tmp_path):
6774
im = hopper()
6875
out = str(tmp_path / "temp.xbm")

docs/example/DdsImagePlugin.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,9 @@ class DdsImageFile(ImageFile.ImageFile):
210210
format_description = "DirectDraw Surface"
211211

212212
def _open(self):
213-
magic, header_size = struct.unpack("<II", self.fp.read(8))
213+
if not _accept(self.fp.read(4)):
214+
raise SyntaxError("not a DDS file")
215+
(header_size,) = struct.unpack("<I", self.fp.read(4))
214216
if header_size != 124:
215217
raise OSError(f"Unsupported header size {repr(header_size)}")
216218
header_bytes = self.fp.read(header_size - 4)

src/PIL/DdsImagePlugin.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ class DdsImageFile(ImageFile.ImageFile):
111111
format_description = "DirectDraw Surface"
112112

113113
def _open(self):
114-
magic, header_size = struct.unpack("<II", self.fp.read(8))
114+
if not _accept(self.fp.read(4)):
115+
raise SyntaxError("not a DDS file")
116+
(header_size,) = struct.unpack("<I", self.fp.read(4))
115117
if header_size != 124:
116118
raise OSError(f"Unsupported header size {repr(header_size)}")
117119
header_bytes = self.fp.read(header_size - 4)

src/PIL/FliImagePlugin.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@
2626

2727

2828
def _accept(prefix):
29-
return len(prefix) >= 6 and i16(prefix, 4) in [0xAF11, 0xAF12]
29+
return (
30+
len(prefix) >= 6
31+
and i16(prefix, 4) in [0xAF11, 0xAF12]
32+
and i16(prefix, 14) in [0, 3] # flags
33+
)
3034

3135

3236
##
@@ -44,11 +48,7 @@ def _open(self):
4448

4549
# HEAD
4650
s = self.fp.read(128)
47-
if not (
48-
_accept(s)
49-
and i16(s, 14) in [0, 3] # flags
50-
and s[20:22] == b"\x00\x00" # reserved
51-
):
51+
if not (_accept(s) and s[20:22] == b"\x00\x00"):
5252
raise SyntaxError("not an FLI/FLC file")
5353

5454
# frames

src/PIL/FtexImagePlugin.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ class FtexImageFile(ImageFile.ImageFile):
9494
format_description = "Texture File Format (IW2:EOC)"
9595

9696
def _open(self):
97-
struct.unpack("<I", self.fp.read(4)) # magic
97+
if not _accept(self.fp.read(4)):
98+
raise SyntaxError("not an FTEX file")
9899
struct.unpack("<i", self.fp.read(4)) # version
99100
self._size = struct.unpack("<2i", self.fp.read(8))
100101
mipmap_count, format_count = struct.unpack("<2i", self.fp.read(8))

src/PIL/GbrImagePlugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ class GbrImageFile(ImageFile.ImageFile):
4343

4444
def _open(self):
4545
header_size = i32(self.fp.read(4))
46-
version = i32(self.fp.read(4))
4746
if header_size < 20:
4847
raise SyntaxError("not a GIMP brush")
48+
version = i32(self.fp.read(4))
4949
if version not in (1, 2):
5050
raise SyntaxError(f"Unsupported GIMP brush version: {version}")
5151

src/PIL/IcnsImagePlugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ def __init__(self, fobj):
167167
self.dct = dct = {}
168168
self.fobj = fobj
169169
sig, filesize = nextheader(fobj)
170-
if sig != MAGIC:
170+
if not _accept(sig):
171171
raise SyntaxError("not an icns file")
172172
i = HEADERSIZE
173173
while i < filesize:

src/PIL/TiffImagePlugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ def __init__(self, ifh=b"II\052\0\0\0\0\0", prefix=None, group=None):
493493
endianness.
494494
:param prefix: Override the endianness of the file.
495495
"""
496-
if ifh[:4] not in PREFIXES:
496+
if not _accept(ifh):
497497
raise SyntaxError(f"not a TIFF file (header {repr(ifh)} not valid)")
498498
self._prefix = prefix if prefix is not None else ifh[:2]
499499
if self._prefix == MM:

0 commit comments

Comments
 (0)