From: Michael Tremer Date: Fri, 19 Jan 2018 16:04:54 +0000 (+0100) Subject: libpakfire: Don't SEGV on unref with NULL X-Git-Tag: 0.9.28~1285^2~1154 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=75c60de7b5d3533bcfca1e78a8392bde26058db6;p=pakfire.git libpakfire: Don't SEGV on unref with NULL Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 349f28633..b1a0b1813 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -316,11 +316,15 @@ static void pakfire_archive_free(PakfireArchive archive) { pakfire_free(archive); } -PAKFIRE_EXPORT void pakfire_archive_unref(PakfireArchive archive) { +PAKFIRE_EXPORT PakfireArchive pakfire_archive_unref(PakfireArchive archive) { + if (!archive) + return NULL; + if (--archive->nrefs > 0) - return; + return archive; pakfire_archive_free(archive); + return NULL; } static int pakfire_archive_parse_entry_format(PakfireArchive archive, diff --git a/src/libpakfire/include/pakfire/archive.h b/src/libpakfire/include/pakfire/archive.h index 5de8a2877..62daef301 100644 --- a/src/libpakfire/include/pakfire/archive.h +++ b/src/libpakfire/include/pakfire/archive.h @@ -40,7 +40,7 @@ typedef enum pakfire_archive_flags { PakfireArchive pakfire_archive_create(Pakfire pakfire); PakfireArchive pakfire_archive_ref(PakfireArchive archive); -void pakfire_archive_unref(PakfireArchive archive); +PakfireArchive pakfire_archive_unref(PakfireArchive archive); PakfireArchive pakfire_archive_open(Pakfire pakfire, const char* path);