From 3841c96ec6998088f3722b7535b38e44dbe030af Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 19 Jan 2020 03:15:37 +0300 Subject: [PATCH 1/5] Cleanup code a bit --- src/PIL/JpegImagePlugin.py | 69 ++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index 82fc12e106c..aa0a0565aeb 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -100,42 +100,39 @@ def APP(self, marker): # reassemble the profile, rather than assuming that the APP2 # markers appear in the correct sequence. self.icclist.append(s) - elif marker == 0xFFED: - if s[:14] == b"Photoshop 3.0\x00": - blocks = s[14:] - # parse the image resource block - offset = 0 - photoshop = {} - while blocks[offset : offset + 4] == b"8BIM": - offset += 4 - # resource code - try: - code = i16(blocks, offset) - except struct.error: - break - offset += 2 - # resource name (usually empty) - name_len = i8(blocks[offset]) - # name = blocks[offset+1:offset+1+name_len] - offset = 1 + offset + name_len - if offset & 1: - offset += 1 - # resource data block - size = i32(blocks, offset) - offset += 4 - data = blocks[offset : offset + size] - if code == 0x03ED: # ResolutionInfo - data = { - "XResolution": i32(data[:4]) / 65536, - "DisplayedUnitsX": i16(data[4:8]), - "YResolution": i32(data[8:12]) / 65536, - "DisplayedUnitsY": i16(data[12:]), - } - photoshop[code] = data - offset = offset + size - if offset & 1: - offset += 1 - self.info["photoshop"] = photoshop + elif marker == 0xFFED and s[:14] == b"Photoshop 3.0\x00": + # parse the image resource block + offset = 14 + photoshop = {} + while s[offset : offset + 4] == b"8BIM": + offset += 4 + # resource code + try: + code = i16(s, offset) + except struct.error: + break + offset += 2 + # resource name (usually empty) + name_len = i8(s[offset]) + # name = s[offset+1:offset+1+name_len] + offset += 1 + name_len + offset += offset & 1 # align + # resource data block + size = i32(s, offset) + offset += 4 + data = s[offset : offset + size] + if code == 0x03ED: # ResolutionInfo + data = { + "XResolution": i32(data[:4]) / 65536, + "DisplayedUnitsX": i16(data[4:8]), + "YResolution": i32(data[8:12]) / 65536, + "DisplayedUnitsY": i16(data[12:]), + } + photoshop[code] = data + offset += size + offset += offset & 1 # align + self.info["photoshop"] = photoshop + elif marker == 0xFFEE and s[:5] == b"Adobe": self.info["adobe"] = i16(s, 5) # extract Adobe custom properties From f55eb73934eed02acd63e803d16667ec404f693d Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 19 Jan 2020 03:35:17 +0300 Subject: [PATCH 2/5] handle Photoshop chunks which can't be processed --- src/PIL/JpegImagePlugin.py | 64 ++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index aa0a0565aeb..ca670d7c064 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -101,37 +101,39 @@ def APP(self, marker): # markers appear in the correct sequence. self.icclist.append(s) elif marker == 0xFFED and s[:14] == b"Photoshop 3.0\x00": - # parse the image resource block - offset = 14 - photoshop = {} - while s[offset : offset + 4] == b"8BIM": - offset += 4 - # resource code - try: - code = i16(s, offset) - except struct.error: - break - offset += 2 - # resource name (usually empty) - name_len = i8(s[offset]) - # name = s[offset+1:offset+1+name_len] - offset += 1 + name_len - offset += offset & 1 # align - # resource data block - size = i32(s, offset) - offset += 4 - data = s[offset : offset + size] - if code == 0x03ED: # ResolutionInfo - data = { - "XResolution": i32(data[:4]) / 65536, - "DisplayedUnitsX": i16(data[4:8]), - "YResolution": i32(data[8:12]) / 65536, - "DisplayedUnitsY": i16(data[12:]), - } - photoshop[code] = data - offset += size - offset += offset & 1 # align - self.info["photoshop"] = photoshop + # Process this marker only if previous were empty + if not self.info.get("photoshop"): + # parse the image resource block + offset = 14 + photoshop = {} + while s[offset : offset + 4] == b"8BIM": + try: + offset += 4 + # resource code + code = i16(s, offset) + offset += 2 + # resource name (usually empty) + name_len = i8(s[offset]) + # name = s[offset+1:offset+1+name_len] + offset += 1 + name_len + offset += offset & 1 # align + # resource data block + size = i32(s, offset) + offset += 4 + data = s[offset : offset + size] + if code == 0x03ED: # ResolutionInfo + data = { + "XResolution": i32(data[:4]) / 65536, + "DisplayedUnitsX": i16(data[4:8]), + "YResolution": i32(data[8:12]) / 65536, + "DisplayedUnitsY": i16(data[12:]), + } + photoshop[code] = data + offset += size + offset += offset & 1 # align + except struct.error: + break # no sufficient data + self.info["photoshop"] = photoshop elif marker == 0xFFEE and s[:5] == b"Adobe": self.info["adobe"] = i16(s, 5) From dcd0cd91291234af06445e58030ce9cf46134438 Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 19 Jan 2020 14:48:01 +0300 Subject: [PATCH 3/5] update dict instead of ignoring --- src/PIL/JpegImagePlugin.py | 63 ++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index ca670d7c064..d5e77f9e526 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -101,39 +101,36 @@ def APP(self, marker): # markers appear in the correct sequence. self.icclist.append(s) elif marker == 0xFFED and s[:14] == b"Photoshop 3.0\x00": - # Process this marker only if previous were empty - if not self.info.get("photoshop"): - # parse the image resource block - offset = 14 - photoshop = {} - while s[offset : offset + 4] == b"8BIM": - try: - offset += 4 - # resource code - code = i16(s, offset) - offset += 2 - # resource name (usually empty) - name_len = i8(s[offset]) - # name = s[offset+1:offset+1+name_len] - offset += 1 + name_len - offset += offset & 1 # align - # resource data block - size = i32(s, offset) - offset += 4 - data = s[offset : offset + size] - if code == 0x03ED: # ResolutionInfo - data = { - "XResolution": i32(data[:4]) / 65536, - "DisplayedUnitsX": i16(data[4:8]), - "YResolution": i32(data[8:12]) / 65536, - "DisplayedUnitsY": i16(data[12:]), - } - photoshop[code] = data - offset += size - offset += offset & 1 # align - except struct.error: - break # no sufficient data - self.info["photoshop"] = photoshop + # parse the image resource block + offset = 14 + photoshop = self.info.setdefault("photoshop", {}) + while s[offset : offset + 4] == b"8BIM": + try: + offset += 4 + # resource code + code = i16(s, offset) + offset += 2 + # resource name (usually empty) + name_len = i8(s[offset]) + # name = s[offset+1:offset+1+name_len] + offset += 1 + name_len + offset += offset & 1 # align + # resource data block + size = i32(s, offset) + offset += 4 + data = s[offset : offset + size] + if code == 0x03ED: # ResolutionInfo + data = { + "XResolution": i32(data[:4]) / 65536, + "DisplayedUnitsX": i16(data[4:8]), + "YResolution": i32(data[8:12]) / 65536, + "DisplayedUnitsY": i16(data[12:]), + } + photoshop[code] = data + offset += size + offset += offset & 1 # align + except struct.error: + break # no sufficient data elif marker == 0xFFEE and s[:5] == b"Adobe": self.info["adobe"] = i16(s, 5) From 73171f50466e32e9e34f2fd137cec36c665329e6 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 20 Jan 2020 17:25:40 +0300 Subject: [PATCH 4/5] add test image --- Tests/images/app13-multiple.jpg | Bin 0 -> 80337 bytes Tests/test_file_jpeg.py | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 Tests/images/app13-multiple.jpg diff --git a/Tests/images/app13-multiple.jpg b/Tests/images/app13-multiple.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8341383a0e6311f844fae33cef13e9108f559523 GIT binary patch literal 80337 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 F{|mI~-GcxC literal 0 HcmV?d00001 diff --git a/Tests/test_file_jpeg.py b/Tests/test_file_jpeg.py index af95139ac19..af45ee238d0 100644 --- a/Tests/test_file_jpeg.py +++ b/Tests/test_file_jpeg.py @@ -676,6 +676,13 @@ def test_photoshop(self): with Image.open("Tests/images/app13.jpg") as im: self.assertNotIn("photoshop", im.info) + def test_photoshop_malformed_and_multiple(self): + with Image.open("Tests/images/app13-multiple.jpg") as im: + self.assertIn("photoshop", im.info) + self.assertEqual(24, len(im.info["photoshop"])) + apps_13_lengths = [len(v) for k, v in im.applist if k == "APP13"] + self.assertEqual([65504, 24], apps_13_lengths) + @unittest.skipUnless(is_win32(), "Windows only") class TestFileCloseW32(PillowTestCase): From fd03a68c1a103654a7972c6ea4592c7b81e5ce1d Mon Sep 17 00:00:00 2001 From: Alexander Karpinsky Date: Mon, 27 Jan 2020 15:18:02 +0300 Subject: [PATCH 5/5] Update comment Co-Authored-By: Andrew Murray <3112309+radarhere@users.noreply.github.com> --- src/PIL/JpegImagePlugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index d5e77f9e526..bcf430642a5 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -130,7 +130,7 @@ def APP(self, marker): offset += size offset += offset & 1 # align except struct.error: - break # no sufficient data + break # insufficient data elif marker == 0xFFEE and s[:5] == b"Adobe": self.info["adobe"] = i16(s, 5)