Skip to content

Commit 6417841

Browse files
authored
Merge pull request #8852 from radarhere/save
Only change readonly if saved filename matches opened filename
2 parents c19482f + a7537b1 commit 6417841

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

Tests/test_image.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,15 @@ def test_readonly_save(self, tmp_path: Path) -> None:
258258
assert im.readonly
259259
im.save(temp_file)
260260

261+
def test_save_without_changing_readonly(self, tmp_path: Path) -> None:
262+
temp_file = tmp_path / "temp.bmp"
263+
264+
with Image.open("Tests/images/rgb32bf-rgba.bmp") as im:
265+
assert im.readonly
266+
267+
im.save(temp_file)
268+
assert im.readonly
269+
261270
def test_dump(self, tmp_path: Path) -> None:
262271
im = Image.new("L", (10, 10))
263272
im._dump(str(tmp_path / "temp_L.ppm"))

src/PIL/Image.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2540,8 +2540,13 @@ def save(
25402540
msg = f"unknown file extension: {ext}"
25412541
raise ValueError(msg) from e
25422542

2543+
from . import ImageFile
2544+
25432545
# may mutate self!
2544-
self._ensure_mutable()
2546+
if isinstance(self, ImageFile.ImageFile) and filename == self.filename:
2547+
self._ensure_mutable()
2548+
else:
2549+
self.load()
25452550

25462551
save_all = params.pop("save_all", None)
25472552
self.encoderinfo = {**getattr(self, "encoderinfo", {}), **params}

0 commit comments

Comments
 (0)