From: Michael Tremer Date: Thu, 8 Jul 2021 11:30:58 +0000 (+0000) Subject: archive: Sanity-check pakfire-format X-Git-Tag: 0.9.28~1075 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=04f4f88c9da79c1fdd00bbb96beb3b4b460d892e;p=pakfire.git archive: Sanity-check pakfire-format Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index 9f7e37085..51f97fd75 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -645,6 +645,23 @@ static int pakfire_archive_read_format(PakfireArchive archive, struct archive* a goto ERROR; } + const char* entry_name = archive_entry_pathname(entry); + + // Check for filename (must be "pakfire-format") + if (strcmp(entry_name, "pakfire-format") != 0) { + DEBUG(archive->pakfire, "First file is not named \"pakfire-format\""); + r = 1; + goto ERROR; + } + + // The file cannot be larger than a couple of bytes + size = archive_entry_size(entry); + if (size == 0 || size >= 128) { + DEBUG(archive->pakfire, "pakfire-format is of an invalid size: %zu bytes\n", size); + r = 1; + goto ERROR; + } + // Read the entire payload r = pakfire_archive_copy_data_to_buffer(archive->pakfire, a, entry, &data, &size); if (r) { @@ -664,7 +681,7 @@ ERROR: if (data) free(data); - return 0; + return r; } static int pakfire_archive_try_open(PakfireArchive archive, const char* path) {