]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Safe writes: delete temporary file if rename fails
authorMartin Matuska <martin@matuska.org>
Sat, 29 Feb 2020 01:10:00 +0000 (02:10 +0100)
committerMartin Matuska <martin@matuska.org>
Sat, 29 Feb 2020 01:19:35 +0000 (02:19 +0100)
Change error message to "Failed to safe write"
Fixes #1341

libarchive/archive_write_disk_posix.c
libarchive/archive_write_disk_windows.c

index cc53a3d318e0196a6694b9a27d5119a672086d19..173ea808fb8679ce76e19123108402fed4455918 100644 (file)
@@ -1855,8 +1855,9 @@ finish_metadata:
                a->fd = -1;
                if (a->tmpname) {
                        if (rename(a->tmpname, a->name) == -1) {
+                               unlink(a->tmpname);
                                archive_set_error(&a->archive, errno,
-                                   "rename failed");
+                                   "Failed to safe write");
                                ret = ARCHIVE_FATAL;
                        }
                        a->tmpname = NULL;
index 77e36c4a621dd04b6a4b4e040c5d3df756103560..1d1275df3b5711651d29c3fde79445747de29ec9 100644 (file)
@@ -1281,8 +1281,9 @@ _archive_write_disk_finish_entry(struct archive *_a)
                        /* Windows does not support atomic rename */
                        disk_unlink(a->name);
                        if (_wrename(a->tmpname, a->name) != 0) {
+                               disk_unlink(a->tmpname);
                                archive_set_error(&a->archive, errno,
-                                   "rename failed");
+                                   "Failed to safe write");
                                ret = ARCHIVE_FATAL;
                        }
                        a->tmpname = NULL;