From a9b9a63614c7838be9efe421062252c1c8c0546a Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 8 Oct 2024 20:48:32 +1100 Subject: [PATCH] Do not create core image in seek(), when load() might not run --- src/PIL/TiffImagePlugin.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index d4c46a79778..f3571fda3c8 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1193,11 +1193,11 @@ def seek(self, frame: int) -> None: if not self._seek_check(frame): return self._seek(frame) - # Create a new core image object on second and - # subsequent frames in the image. Image may be - # different size/mode. - Image._decompression_bomb_check(self._tile_size) - self.im = Image.core.new(self.mode, self._tile_size) + if self._im is not None and ( + self.im.size != self._tile_size or self.im.mode != self.mode + ): + # The core image will no longer be used + self._im = None def _seek(self, frame: int) -> None: self.fp = self._fp @@ -1279,6 +1279,7 @@ def load(self) -> Image.core.PixelAccess | None: def load_prepare(self) -> None: if self._im is None: + Image._decompression_bomb_check(self._tile_size) self.im = Image.core.new(self.mode, self._tile_size) ImageFile.ImageFile.load_prepare(self)