From d84ec3fbc21ff943b4c742ec141de30efc8bd769 Mon Sep 17 00:00:00 2001 From: Martin Matuska Date: Mon, 2 Mar 2020 02:45:50 +0100 Subject: [PATCH] Store errno when unlinking after rename on safe write failed --- libarchive/archive_write_disk_posix.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libarchive/archive_write_disk_posix.c b/libarchive/archive_write_disk_posix.c index 173ea808f..35b5aedf7 100644 --- a/libarchive/archive_write_disk_posix.c +++ b/libarchive/archive_write_disk_posix.c @@ -1654,6 +1654,7 @@ _archive_write_disk_finish_entry(struct archive *_a) { struct archive_write_disk *a = (struct archive_write_disk *)_a; int ret = ARCHIVE_OK; + int oerrno; archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC, ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA, @@ -1855,7 +1856,9 @@ finish_metadata: a->fd = -1; if (a->tmpname) { if (rename(a->tmpname, a->name) == -1) { + oerrno = errno; unlink(a->tmpname); + errno = oerrno; archive_set_error(&a->archive, errno, "Failed to safe write"); ret = ARCHIVE_FATAL; -- 2.47.2