]> git.ipfire.org Git - people/ric9/pakfire.git/commitdiff
archive: Ensure we are only opening regular files
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 12 Jan 2025 11:22:58 +0000 (11:22 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 12 Jan 2025 11:22:58 +0000 (11:22 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/archive.c
tests/libpakfire/archive.c

index 07120fef6944578fba184022ab0a205781c7fb41..1c251fcc4bad06ec2e17219a5417527cdb5ff0ff 100644 (file)
@@ -719,6 +719,20 @@ int pakfire_archive_open(struct pakfire_archive** archive,
                goto ERROR;
        }
 
+       // This must be a regular file
+       if (!S_ISREG(a->stat.st_mode)) {
+               // Fail on directories
+               if (S_ISDIR(a->stat.st_mode)) {
+                       r = -EISDIR;
+                       goto ERROR;
+
+               // Fail for everything else
+               } else {
+                       r = -EINVAL;
+                       goto ERROR;
+               }
+       }
+
        // Read all package metadata
        r = pakfire_archive_read_metadata(a);
        if (r < 0)
index 94a1d3ecd041e6b908b859e8f94ea75a29f33df1..32f9f4c9168b547d1a625117b90f3b86458069ab 100644 (file)
@@ -73,7 +73,7 @@ static int test_open_directory(const struct test* t) {
        int r = EXIT_FAILURE;
 
        // Open the archive
-       ASSERT_ERRNO(pakfire_archive_open(&archive, t->pakfire, TEST_SRC_PATH), EISDIR);
+       ASSERT_ERROR(pakfire_archive_open(&archive, t->pakfire, TEST_SRC_PATH), EISDIR);
        ASSERT_NULL(archive);
 
        // Everything passed