46 lines
2.0 KiB
Diff
46 lines
2.0 KiB
Diff
From 2a84ae73e93b0c1f4f12f2c58104f8327d10e41b Mon Sep 17 00:00:00 2001
|
|
From: vlefebvre <valentin.lefebvre@suse.com>
|
|
Date: Wed, 7 Aug 2024 11:10:05 +0200
|
|
Subject: [PATCH] fetch_disk_trailer: Don't truncate the size verif
|
|
Reference:https://github.com/gdraheim/zziplib/commit/2a84ae73e93b0c1f4f12f2c58104f8327d10e41b
|
|
|
|
* We must check if the tail obtained have the size of the zzip_disk_trailer
|
|
struct. end - tail should be at least >= of the size but not size - 2.
|
|
Where truncated by 2 was good for pre-C99 compilers.
|
|
* Fix gdraheim#165
|
|
|
|
---
|
|
zzip/zip.c | 9 ++++-----
|
|
1 file changed, 4 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/zzip/zip.c b/zzip/zip.c
|
|
index dfa1c2f..8d9bc9b 100644
|
|
--- a/zzip/zip.c
|
|
+++ b/zzip/zip.c
|
|
@@ -293,7 +293,7 @@ __zzip_fetch_disk_trailer(int fd, zzip_off_t filesize,
|
|
for (tail = end - 1; (tail >= mapped); tail--)
|
|
{
|
|
if ((*tail == 'P') && /* quick pre-check for trailer magic */
|
|
- end - tail >= __sizeof(struct zzip_disk_trailer) - 2 &&
|
|
+ end - tail >= __sizeof(struct zzip_disk_trailer) &&
|
|
zzip_disk_trailer_check_magic(tail))
|
|
{
|
|
# ifndef ZZIP_DISK64_TRAILER
|
|
@@ -329,10 +329,9 @@ __zzip_fetch_disk_trailer(int fd, zzip_off_t filesize,
|
|
if (trailer->zz_rootseek >= filesize || (trailer->zz_rootseek + trailer->zz_rootsize) >= filesize)
|
|
return(ZZIP_CORRUPTED);
|
|
{ return(0); }
|
|
- } else if ((*tail == 'P') &&
|
|
- end - tail >=
|
|
- __sizeof(struct zzip_disk64_trailer) - 2
|
|
- && zzip_disk64_trailer_check_magic(tail))
|
|
+ }
|
|
+ else if ((*tail == 'P') && end - tail >= __sizeof(struct zzip_disk64_trailer) &&
|
|
+ zzip_disk64_trailer_check_magic(tail))
|
|
{
|
|
# ifndef ZZIP_DISK64_TRAILER
|
|
return (ZZIP_DIR_LARGEFILE);
|
|
--
|
|
2.27.0
|
|
|