From ca345b12101beed5ee3144be29fa5c2a8f6bb534 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sun, 12 Jan 2025 11:22:58 +0000 Subject: [PATCH] archive: Ensure we are only opening regular files Signed-off-by: Michael Tremer --- src/pakfire/archive.c | 14 ++++++++++++++ tests/libpakfire/archive.c | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) 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 -- 2.47.3