Skip to content

Commit f99e0b8

Browse files
committed
Replaced primitive "magic number" inside of JpegImagePlugin._accept() function by more correct version.
1 parent d6be133 commit f99e0b8

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

Tests/test_file_jpeg.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,26 @@ def test_icc_after_SOF(self):
706706
with Image.open("Tests/images/icc-after-SOF.jpg") as im:
707707
assert im.info["icc_profile"] == b"profile"
708708

709+
def test_reading_not_whole_file_for_define_it_type(self):
710+
size = 1024 ** 2
711+
buffer = BytesIO(b"\xFF" * size) # Many xFF bytes
712+
buffer.max_pos = 0
713+
orig_read = buffer.read
714+
715+
def read(n=-1):
716+
res = orig_read(n)
717+
buffer.max_pos = max(buffer.max_pos, buffer.tell())
718+
return res
719+
720+
buffer.read = read
721+
with pytest.raises(OSError):
722+
Image.open(buffer)
723+
724+
# Only small part of file has been read.
725+
# The upper limit of max_pos (8Kb) was chosen experimentally
726+
# and increased approximately twice.
727+
assert 0 < buffer.max_pos < 8 * 1024
728+
709729

710730
@pytest.mark.skipif(not is_win32(), reason="Windows only")
711731
@skip_unless_feature("jpg")

src/PIL/JpegImagePlugin.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,8 @@ def DQT(self, marker):
323323

324324

325325
def _accept(prefix):
326-
return prefix[0:1] == b"\377"
326+
# Magic number was taken from https://en.wikipedia.org/wiki/JPEG
327+
return prefix[0:3] == b"\xFF\xD8\xFF"
327328

328329

329330
##

0 commit comments

Comments
 (0)