From 30dc18523676c35d7610f69be4fca6c5d3bbb2a5 Mon Sep 17 00:00:00 2001 From: Dmitry Bely Date: Mon, 1 Aug 2016 12:55:06 +0300 Subject: [PATCH 1/2] __next is not updated properly --- PIL/TiffImagePlugin.py | 1 + Tests/test_file_tiff.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 524d42a34..1e194d9a6 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -975,6 +975,7 @@ class TiffImageFile(ImageFile.ImageFile): self.__frame += 1 self.fp.seek(self._frame_pos[frame]) self.tag_v2.load(self.fp) + self.__next = self.tag_v2.next # fill the legacy tag/ifd entries self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2) self.__frame = frame diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 5b01de12b..621694694 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -434,6 +434,18 @@ class TestFileTiff(PillowTestCase): self.assertEqual(im.size, (10, 10)) im.load() + self.assertRaises(EOFError, lambda: im.seek(2)) + + im.seek(0) + self.assertEqual(im._compression, 'tiff_ccitt') + self.assertEqual(im.size, (10, 10)) + im.load() + + im.seek(1) + self.assertEqual(im._compression, 'packbits') + self.assertEqual(im.size, (10, 10)) + im.load() + im.seek(0) self.assertEqual(im._compression, 'tiff_ccitt') self.assertEqual(im.size, (10, 10)) From 25804cc8c753eb542f66310c0ef6fefff99d97ab Mon Sep 17 00:00:00 2001 From: Dmitry Bely Date: Mon, 8 Aug 2016 09:35:23 +0300 Subject: [PATCH 2/2] Add another TIFF file that triggers "ValueError: seek of closed file" bug --- Tests/images/compression2.tif | Bin 0 -> 506 bytes Tests/test_file_tiff.py | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 Tests/images/compression2.tif diff --git a/Tests/images/compression2.tif b/Tests/images/compression2.tif new file mode 100644 index 0000000000000000000000000000000000000000..108d7ec6aabd374a4afa14edbd4c899a1790678d GIT binary patch literal 506 zcmebD)MAifU|{%;1@bZcV_;!m1j>Q|BQu!I1>`Uyv6-N34xl(Ql+D_}z`zD&gY*kB zLd*fF5k(RggR((pibK_i0NGNEtYEuN0ol?}_9Y-&21&0WBNKxTQ0x{E3ji%i0n#A5 zV04J5o10H&l0uoGo|%C{QEHh&l4WwLfr+u6f=05YLQsf;k%57ku91PE8G{8JkmhHQ xeK0>W0ogD=1DS9?vjG(m@-xW)FhB1Ds)zac7?6$4&*wlE0|CshFq#xU0|0#5E^`0? literal 0 HcmV?d00001 diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 621694694..dbc856bfb 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -451,6 +451,28 @@ class TestFileTiff(PillowTestCase): self.assertEqual(im.size, (10, 10)) im.load() + im2 = Image.open('Tests/images/compression2.tif') + + im2.seek(0) + self.assertEqual(im2._compression, 'packbits') + self.assertEqual(im2.size, (10, 10)) + im2.load() + + im2.seek(1) + self.assertEqual(im2._compression, 'tiff_ccitt') + self.assertEqual(im2.size, (10, 10)) + im2.load() + + im2.seek(0) + self.assertEqual(im2._compression, 'packbits') + self.assertEqual(im2.size, (10, 10)) + im2.load() + + im2.seek(1) + self.assertEqual(im2._compression, 'tiff_ccitt') + self.assertEqual(im2.size, (10, 10)) + im2.load() + def test_save_tiff_with_jpegtables(self): # Arrange outfile = self.tempfile("temp.tif")