Skip to content

Commit

Permalink
If an error occurs after creating a file, remove the file
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Mar 14, 2022
1 parent 6faebd3 commit 71c30ed
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
9 changes: 9 additions & 0 deletions Tests/test_image.py
Expand Up @@ -652,6 +652,15 @@ def test_no_resource_warning_on_save(self, tmp_path):
with warnings.catch_warnings():
im.save(temp_file)

def test_no_new_file_on_error(self, tmp_path):
temp_file = str(tmp_path / "temp.jpg")

im = Image.new("RGB", (0, 0))
with pytest.raises(SystemError):
im.save(temp_file)

assert not os.path.exists(temp_file)

def test_load_on_nonexclusive_multiframe(self):
with open("Tests/images/frozenpond.mpo", "rb") as fp:

Expand Down
13 changes: 11 additions & 2 deletions src/PIL/Image.py
Expand Up @@ -2286,7 +2286,9 @@ def save(self, fp, format=None, **params):
else:
save_handler = SAVE[format.upper()]

created = False
if open_fp:
created = not os.path.exists(filename)
if params.get("append", False):
# Open also for reading ("+"), because TIFF save_all
# writer needs to go back and edit the written data.
Expand All @@ -2296,10 +2298,17 @@ def save(self, fp, format=None, **params):

try:
save_handler(self, fp, filename)
finally:
# do what we can to clean up
except Exception:
if open_fp:
fp.close()
if created:
try:
os.remove(filename)
except PermissionError:
pass
raise
if open_fp:
fp.close()

def seek(self, frame):
"""
Expand Down

0 comments on commit 71c30ed

Please sign in to comment.