From 13f0260beae851f7d5dd96e9ef757d8d6d7daac1 Mon Sep 17 00:00:00 2001
From: Mark Adler <madler@alumni.caltech.edu>
Date: Sun, 9 Feb 2020 07:20:13 -0800
Subject: [PATCH] Fix false overlapped components detection on 32-bit systems.
32-bit systems with ZIP64_SUPPORT enabled could have different
size types for zoff_t and zusz_t. That resulted in bad parameter
passing to the bound tracking functions, itself due to the lack of
use of C function prototypes in unzip. This commit assures that
parameters are cast properly for those calls.
This problem occurred only for ill-chosen make options, which give
a 32-bit zoff_t. A proper build will result in a zoff_t of 64 bits,
even on 32-bit systems.
---
extract.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/extract.c b/extract.c
index 1b73cb0..d9866f9 100644
a
|
b
|
static ZCONST char Far OverlappedComponents[] = |
329 | 329 | |
330 | 330 | |
331 | 331 | /* A growable list of spans. */ |
332 | | typedef zoff_t bound_t; |
| 332 | typedef zusz_t bound_t; |
333 | 333 | typedef struct { |
334 | 334 | bound_t beg; /* start of the span */ |
335 | 335 | bound_t end; /* one past the end of the span */ |
… |
… |
int extract_or_test_files(__G) /* return PK-type error code */ |
518 | 518 | return PK_MEM; |
519 | 519 | } |
520 | 520 | if ((G.extra_bytes != 0 && |
521 | | cover_add((cover_t *)G.cover, 0, G.extra_bytes) != 0) || |
| 521 | cover_add((cover_t *)G.cover, |
| 522 | (bound_t)0, (bound_t)G.extra_bytes) != 0) || |
522 | 523 | (G.ecrec.have_ecr64 && |
523 | 524 | cover_add((cover_t *)G.cover, G.ecrec.ec64_start, |
524 | 525 | G.ecrec.ec64_end) != 0) || |
… |
… |
static int extract_or_test_entrylist(__G__ numchunk, |
1216 | 1217 | |
1217 | 1218 | /* seek_zipf(__G__ pInfo->offset); */ |
1218 | 1219 | request = G.pInfo->offset + G.extra_bytes; |
1219 | | if (cover_within((cover_t *)G.cover, request)) { |
| 1220 | if (cover_within((cover_t *)G.cover, (bound_t)request)) { |
1220 | 1221 | Info(slide, 0x401, ((char *)slide, |
1221 | 1222 | LoadFarString(OverlappedComponents))); |
1222 | 1223 | return PK_BOMB; |