From: Michael Tremer Date: Sun, 12 Jan 2025 11:22:58 +0000 (+0000) Subject: archive: Ensure we are only opening regular files X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ca345b12101beed5ee3144be29fa5c2a8f6bb534;p=people%2Fric9%2Fpakfire.git archive: Ensure we are only opening regular files Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/archive.c b/src/pakfire/archive.c index 07120fef6..1c251fcc4 100644 --- a/src/pakfire/archive.c +++ b/src/pakfire/archive.c @@ -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) diff --git a/tests/libpakfire/archive.c b/tests/libpakfire/archive.c index 94a1d3ecd..32f9f4c91 100644 --- a/tests/libpakfire/archive.c +++ b/tests/libpakfire/archive.c @@ -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