From 75c60de7b5d3533bcfca1e78a8392bde26058db6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 19 Jan 2018 17:04:54 +0100 Subject: [PATCH] libpakfire: Don't SEGV on unref with NULL Signed-off-by: Michael Tremer --- src/libpakfire/archive.c | 8 ++++++-- src/libpakfire/include/pakfire/archive.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) 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); -- 2.39.5