Skip to content

Commit 92eb58e

Browse files
authored
Merge pull request #8859 from radarhere/filename
Include filename in ImageFile state
2 parents 7c56b38 + 8dbbce6 commit 92eb58e

File tree

4 files changed

+9
-2
lines changed

4 files changed

+9
-2
lines changed

Tests/test_pickle.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def test_pickle_jpeg() -> None:
8181
unpickled_image = pickle.loads(pickle.dumps(image))
8282

8383
# Assert
84+
assert unpickled_image.filename == "Tests/images/hopper.jpg"
8485
assert len(unpickled_image.layer) == 3
8586
assert unpickled_image.layers == 3
8687

src/PIL/Image.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2543,7 +2543,9 @@ def save(
25432543
from . import ImageFile
25442544

25452545
# may mutate self!
2546-
if isinstance(self, ImageFile.ImageFile) and filename == self.filename:
2546+
if isinstance(self, ImageFile.ImageFile) and os.path.abspath(
2547+
filename
2548+
) == os.path.abspath(self.filename):
25472549
self._ensure_mutable()
25482550
else:
25492551
self.load()

src/PIL/ImageFile.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,12 @@ def get_format_mimetype(self) -> str | None:
252252
return Image.MIME.get(self.format.upper())
253253
return None
254254

255+
def __getstate__(self) -> list[Any]:
256+
return super().__getstate__() + [self.filename]
257+
255258
def __setstate__(self, state: list[Any]) -> None:
256259
self.tile = []
260+
self.filename = state[5]
257261
super().__setstate__(state)
258262

259263
def verify(self) -> None:

src/PIL/JpegImagePlugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,8 +403,8 @@ def __getstate__(self) -> list[Any]:
403403
return super().__getstate__() + [self.layers, self.layer]
404404

405405
def __setstate__(self, state: list[Any]) -> None:
406+
self.layers, self.layer = state[6:]
406407
super().__setstate__(state)
407-
self.layers, self.layer = state[5:]
408408

409409
def load_read(self, read_bytes: int) -> bytes:
410410
"""

0 commit comments

Comments
 (0)