From: Michael Tremer Date: Mon, 5 Sep 2022 15:02:50 +0000 (+0000) Subject: archive: Avoid endless loop when parsing legacy packages X-Git-Tag: 0.9.28~329 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ecce772eac058bc6a0f20c927bb4a493f69426e4;p=pakfire.git archive: Avoid endless loop when parsing legacy packages Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index df747cc80..a48cbbc21 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -1122,13 +1122,6 @@ static int pakfire_archive_make_package_from_json(struct pakfire_archive* archiv } } - // Import filelist - struct pakfire_filelist* filelist = pakfire_archive_get_filelist(archive); - if (filelist) { - pakfire_package_set_filelist(pkg, filelist); - pakfire_filelist_unref(filelist); - } - // Success! *package = pkg; return 0; @@ -1192,6 +1185,9 @@ static int pakfire_archive_make_legacy_package(struct pakfire_archive* archive, if (arch) free(arch); + // Set package pointer right here to avoid an endless loop when loading the filelist + *package = pkg; + #ifdef ENABLE_DEBUG const char* nevra = pakfire_package_get_nevra(pkg); DEBUG(archive->pakfire, "Created package %s (%p) from archive %p\n", @@ -1318,6 +1314,13 @@ static int pakfire_archive_make_legacy_package(struct pakfire_archive* archive, } } + // Import filelist + struct pakfire_filelist* filelist = pakfire_archive_get_filelist(archive); + if (filelist) { + pakfire_package_set_filelist(pkg, filelist); + pakfire_filelist_unref(filelist); + } + // Set digest switch (PAKFIRE_ARCHIVE_CHECKSUM) { case PAKFIRE_DIGEST_SHA2_512: @@ -1332,8 +1335,6 @@ static int pakfire_archive_make_legacy_package(struct pakfire_archive* archive, break; } - *package = pkg; - return 0; } @@ -1362,13 +1363,6 @@ PAKFIRE_EXPORT int pakfire_archive_make_package(struct pakfire_archive* archive, else r = pakfire_archive_make_legacy_package(archive, repo, package); - // Import filelist - struct pakfire_filelist* filelist = pakfire_archive_get_filelist(archive); - if (filelist) { - pakfire_package_set_filelist(*package, filelist); - pakfire_filelist_unref(filelist); - } - // Free dummy repository if (dummy) pakfire_repo_unref(dummy);