]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Try being more robust against non-existant files
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 May 2022 15:55:03 +0000 (15:55 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 20 May 2022 15:55:03 +0000 (15:55 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index 4775355c85a0a330ff6c20f6f7090f3814d0a7ad..30df55782cd79d8b460f9c0075b58d89a913c7b7 100644 (file)
@@ -132,7 +132,8 @@ static const char* pakfire_archive_legacy_filename(
        A helper function to close the archive and reset our data structures
 */
 static void close_archive(struct pakfire_archive* archive, struct archive* a) {
-       archive_read_free(a);
+       if (a)
+               archive_read_free(a);
 
        // Rewind the file descriptor
        rewind(archive->f);
@@ -323,20 +324,21 @@ static la_ssize_t pakfire_archive_read_callback(struct archive* a,
 static struct archive* pakfire_archive_open_payload(struct pakfire_archive* archive,
                struct archive** a, size_t* size) {
        struct archive_entry* entry = NULL;
+       struct archive* payload = NULL;
 
        // Find the payload
        int r = open_archive_and_find(archive, a, &entry, "DATA");
        if (r)
-               return NULL;
+               goto ERROR;
 
        // Store size
        if (size)
                *size = archive_entry_size(entry);
 
        // Allocate a new archive object
-       struct archive* payload = archive_read_new();
+       payload = archive_read_new();
        if (!payload)
-               return NULL;
+               goto ERROR;
 
        // All of our packages are tar balls
        archive_read_support_format_tar(payload);
@@ -356,9 +358,8 @@ static struct archive* pakfire_archive_open_payload(struct pakfire_archive* arch
        return payload;
 
 ERROR:
-       archive_read_free(payload);
-       close_archive(archive, *a);
-       *a = NULL;
+       if (payload)
+               archive_read_free(payload);
 
        return NULL;
 }
@@ -1043,7 +1044,8 @@ ERROR:
                archive_write_free(writer);
        if (payload)
                archive_read_free(payload);
-       close_archive(archive, a);
+       if (a)
+               close_archive(archive, a);
 
        return r;
 }