diff --git a/Tests/images/comment_after_last_frame.gif b/Tests/images/comment_after_last_frame.gif new file mode 100644 index 00000000000..9f5c7b8da47 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 dcdf2179afa..a34cb2cb923 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) - - # 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) +@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) def test_no_change(): diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 33b968a8f3f..778245ed21d 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -185,8 +185,6 @@ def _seek(self, frame, update_image=True): if not s or s == b";": raise EOFError - self.__frame = frame - self.tile = [] palette = None @@ -291,6 +289,8 @@ def _seek(self, frame, update_image=True): if interlace is None: # self._fp = None raise EOFError + + self.__frame = frame if not update_image: return