diff --git a/Tests/images/test_extents.gif b/Tests/images/test_extents.gif new file mode 100644 index 00000000000..03c436435d6 Binary files /dev/null and b/Tests/images/test_extents.gif differ diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 8388949888d..f9c31212469 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -663,3 +663,9 @@ def test_lzw_bits(self): self.assertEqual(im.tile[0][3][0], 11) # LZW bits # codec error prepatch im.load() + + def test_extents(self): + im = Image.open('Tests/images/test_extents.gif') + self.assertEqual(im.size, (100, 100)) + im.seek(1) + self.assertEqual(im.size, (150, 150)) diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 3dc13ac0392..5605b558147 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -233,6 +233,8 @@ def _seek(self, frame): # extent x0, y0 = i16(s[0:]), i16(s[2:]) x1, y1 = x0 + i16(s[4:]), y0 + i16(s[6:]) + if x1 > self.size[0] or y1 > self.size[1]: + self._size = max(x1, self.size[0]), max(y1, self.size[1]) self.dispose_extent = x0, y0, x1, y1 flags = i8(s[8])