From a5df951b14c4ed3f8f89dfe64baa2038ccd247e0 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Thu, 29 Oct 2026 22:54:24 +1100 Subject: [PATCH] Expand core image during seek() --- Tests/test_file_gif.py | 2 -- src/PIL/GifImagePlugin.py | 15 ++++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Tests/test_file_gif.py b/Tests/test_file_gif.py index 89f271c458b..dee210b8a40 100644 --- a/Tests/test_file_gif.py +++ b/Tests/test_file_gif.py @@ -1478,8 +1478,6 @@ def test_extents( im.seek(1) assert im.size == (150, 150) - - im.load() assert im.im.size == (150, 150) diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 1feef070d69..86aaa493ec0 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -284,6 +284,14 @@ def _seek(self, frame: int, update_image: bool = True) -> None: size = max(x1, self.size[0]), max(y1, self.size[1]) Image._decompression_bomb_check(size) self._size = size + + if self._im is not None and update_image: + expanded_im = Image.core.fill(self.im.mode, self.size) + if self.mode == "P": + expanded_im.putpalette("RGB", "RGB", self.im.getpalette()) + expanded_im.paste(self.im, (0, 0, *self.im.size)) + + self.im = expanded_im frame_dispose_extent = x0, y0, x1, y1 flags = s[8] @@ -447,13 +455,6 @@ def load_prepare(self) -> None: self.im.putpalette("RGB", *self._frame_palette.getdata()) else: self._im = None - if not self._prev_im and self._im is not None and self.size != self.im.size: - expanded_im = Image.core.fill(self.im.mode, self.size) - if self._frame_palette: - expanded_im.putpalette("RGB", *self._frame_palette.getdata()) - expanded_im.paste(self.im, (0, 0, *self.im.size)) - - self.im = expanded_im self._mode = temp_mode self._frame_palette = None