From 1103e82d17311dac9ec2f32cb7e738fda8c64271 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 2 Apr 2025 11:14:58 +1100 Subject: [PATCH 1/2] Include filename in state --- Tests/test_pickle.py | 1 + src/PIL/ImageFile.py | 4 ++++ src/PIL/JpegImagePlugin.py | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Tests/test_pickle.py b/Tests/test_pickle.py index 70661ecc1..1c48cb743 100644 --- a/Tests/test_pickle.py +++ b/Tests/test_pickle.py @@ -81,6 +81,7 @@ def test_pickle_jpeg() -> None: unpickled_image = pickle.loads(pickle.dumps(image)) # Assert + assert unpickled_image.filename == "Tests/images/hopper.jpg" assert len(unpickled_image.layer) == 3 assert unpickled_image.layers == 3 diff --git a/src/PIL/ImageFile.py b/src/PIL/ImageFile.py index c5d6383a5..bcb7d462e 100644 --- a/src/PIL/ImageFile.py +++ b/src/PIL/ImageFile.py @@ -252,8 +252,12 @@ class ImageFile(Image.Image): return Image.MIME.get(self.format.upper()) return None + def __getstate__(self) -> list[Any]: + return super().__getstate__() + [self.filename] + def __setstate__(self, state: list[Any]) -> None: self.tile = [] + self.filename = state[5] super().__setstate__(state) def verify(self) -> None: diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index cc1d54b93..969528841 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -403,8 +403,8 @@ class JpegImageFile(ImageFile.ImageFile): return super().__getstate__() + [self.layers, self.layer] def __setstate__(self, state: list[Any]) -> None: + self.layers, self.layer = state[6:] super().__setstate__(state) - self.layers, self.layer = state[5:] def load_read(self, read_bytes: int) -> bytes: """ From 8dbbce624f7ce9ad85eb50075d9e3dfdcb0fbfd4 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 2 Apr 2025 12:16:25 +1100 Subject: [PATCH 2/2] Compare absolute path of filename --- src/PIL/Image.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index c62d7a8a3..807814c02 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -2543,7 +2543,9 @@ class Image: from . import ImageFile # may mutate self! - if isinstance(self, ImageFile.ImageFile) and filename == self.filename: + if isinstance(self, ImageFile.ImageFile) and os.path.abspath( + filename + ) == os.path.abspath(self.filename): self._ensure_mutable() else: self.load()