]> git.ipfire.org Git - pakfire.git/commitdiff
archive: Avoid endless loop when parsing legacy packages
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 5 Sep 2022 15:02:50 +0000 (15:02 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 5 Sep 2022 15:02:50 +0000 (15:02 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/archive.c

index df747cc8022aa0208168abacbb92b911712589f6..a48cbbc219a4255b7a215146393ecf51e20e019d 100644 (file)
@@ -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);