From: Michael Tremer Date: Fri, 20 May 2022 15:55:03 +0000 (+0000) Subject: archive: Try being more robust against non-existant files X-Git-Tag: 0.9.28~777 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=adf32d5b184453468d6f0adaf49c285bce2c518a;p=pakfire.git archive: Try being more robust against non-existant files Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 4775355c8..30df55782 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -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; }