]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Merge pull request #3125 from stoeckmann/disk_clone
authorDustin L. Howett <dustin@howett.net>
Mon, 8 Jun 2026 20:29:48 +0000 (15:29 -0500)
committerMartin Matuska <martin@matuska.de>
Tue, 23 Jun 2026 09:00:15 +0000 (11:00 +0200)
Check allocation in `_archive_write_disk_header`

(cherry picked from commit 2b21f5a6ccb96c02630c846ff464c39bcd1a8b62)

libarchive/archive_write_disk_posix.c
libarchive/archive_write_disk_windows.c

index 4e4e7d935024f3db046d4d5b0d13b06872c7c45d..da824f032a5969a5abda7a0db86eecf57f1db712 100644 (file)
@@ -600,11 +600,12 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
        a->pst = NULL;
        a->current_fixup = NULL;
        a->deferred = 0;
-       if (a->entry) {
-               archive_entry_free(a->entry);
-               a->entry = NULL;
-       }
+       archive_entry_free(a->entry);
        a->entry = archive_entry_clone(entry);
+       if (a->entry == NULL) {
+               archive_set_error(&a->archive, ENOMEM, "Out of memory");
+               return (ARCHIVE_FATAL);
+       }
        a->fd = -1;
        a->fd_offset = 0;
        a->offset = 0;
index 17f09e09164bea5bee43214a447de5b841849227..2b125d32cac95c5e5573c8ae69ac47f78e105c85 100644 (file)
@@ -859,8 +859,11 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
        a->current_fixup = NULL;
        a->deferred = 0;
        archive_entry_free(a->entry);
-       a->entry = NULL;
        a->entry = archive_entry_clone(entry);
+       if (a->entry == NULL) {
+               archive_set_error(&a->archive, ENOMEM, "Out of memory");
+               return (ARCHIVE_FATAL);
+       }
        a->fh = INVALID_HANDLE_VALUE;
        a->fd_offset = 0;
        a->offset = 0;