diff --git a/Tests/images/comment_after_last_frame.gif b/Tests/images/comment_after_last_frame.gif new file mode 100644 index 000000000..9f5c7b8da Binary files /dev/null and b/Tests/images/comment_after_last_frame.gif differ diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index dcdf2179a..a34cb2cb9 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -354,16 +354,23 @@ def test_seek_rewind(): assert_image_equal(im, expected) -def test_n_frames(): - for path, n_frames in [[TEST_GIF, 1], ["Tests/images/iss634.gif", 42]]: - # Test is_animated before n_frames - with Image.open(path) as im: - assert im.is_animated == (n_frames != 1) +@pytest.mark.parametrize( + "path, n_frames", + ( + (TEST_GIF, 1), + ("Tests/images/comment_after_last_frame.gif", 2), + ("Tests/images/iss634.gif", 42), + ), +) +def test_n_frames(path, n_frames): + # Test is_animated before n_frames + with Image.open(path) as im: + assert im.is_animated == (n_frames != 1) - # Test is_animated after n_frames - with Image.open(path) as im: - assert im.n_frames == n_frames - assert im.is_animated == (n_frames != 1) + # Test is_animated after n_frames + with Image.open(path) as im: + assert im.n_frames == n_frames + assert im.is_animated == (n_frames != 1) def test_no_change(): diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 33b968a8f..778245ed2 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -185,8 +185,6 @@ class GifImageFile(ImageFile.ImageFile): if not s or s == b";": raise EOFError - self.__frame = frame - self.tile = [] palette = None @@ -291,6 +289,8 @@ class GifImageFile(ImageFile.ImageFile): if interlace is None: # self._fp = None raise EOFError + + self.__frame = frame if not update_image: return