Skip to content

Commit d3ac789

Browse files
committed
Allow for APP1 markers without EXIF data
1 parent 794a7d6 commit d3ac789

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

Tests/test_file_mpo.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ def test_exif(test_file: str) -> None:
9191
assert info[34665] == 188
9292

9393

94+
def test_app1_not_exif() -> None:
95+
with open("Tests/images/sugarshack.mpo", "rb") as fp:
96+
data = fp.read()
97+
data = data[:60014] + b" " + data[60015:]
98+
b = BytesIO(data)
99+
with Image.open(b) as im:
100+
del im.info["exif"]
101+
102+
im.seek(1)
103+
assert "exif" not in im.info
104+
105+
94106
def test_frame_size() -> None:
95107
# This image has been hexedited to contain a different size
96108
# in the EXIF data of the second frame

src/PIL/MpoImagePlugin.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,16 @@ def seek(self, frame):
145145
self._size = self._initial_size
146146
if i16(segment) == 0xFFE1: # APP1
147147
n = i16(self.fp.read(2)) - 2
148-
self.info["exif"] = ImageFile._safe_read(self.fp, n)
149-
self._reload_exif()
150-
151-
mptype = self.mpinfo[0xB002][frame]["Attribute"]["MPType"]
152-
if mptype.startswith("Large Thumbnail"):
153-
exif = self.getexif().get_ifd(ExifTags.IFD.Exif)
154-
if 40962 in exif and 40963 in exif:
155-
self._size = (exif[40962], exif[40963])
148+
s = ImageFile._safe_read(self.fp, n)
149+
if s[:6] == b"Exif\0\0":
150+
self.info["exif"] = s
151+
self._reload_exif()
152+
153+
mptype = self.mpinfo[0xB002][frame]["Attribute"]["MPType"]
154+
if mptype.startswith("Large Thumbnail"):
155+
exif = self.getexif().get_ifd(ExifTags.IFD.Exif)
156+
if 40962 in exif and 40963 in exif:
157+
self._size = (exif[40962], exif[40963])
156158
elif "exif" in self.info:
157159
del self.info["exif"]
158160
self._reload_exif()

0 commit comments

Comments
 (0)