From 0866b369003fbf81f8f35eb15360a628b3f3aa9a Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Mon, 8 Feb 2010 18:55:15 +0100 Subject: gunzip: inflate_codes(): add fix from upstream gzip to prevent false CRC error Signed-off-by: Joakim Tjernlund Signed-off-by: Denys Vlasenko --- archival/libunarchive/decompress_unzip.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'archival/libunarchive/decompress_unzip.c') diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c index feaa047bd..33e877ec8 100644 --- a/archival/libunarchive/decompress_unzip.c +++ b/archival/libunarchive/decompress_unzip.c @@ -575,13 +575,16 @@ static NOINLINE int inflate_codes(STATE_PARAM_ONLY) do { /* Was: nn -= (e = (e = GUNZIP_WSIZE - ((dd &= GUNZIP_WSIZE - 1) > w ? dd : w)) > nn ? nn : e); */ /* Who wrote THAT?? rewritten as: */ + unsigned delta; + dd &= GUNZIP_WSIZE - 1; e = GUNZIP_WSIZE - (dd > w ? dd : w); + delta = w > dd ? w - dd : dd - w; if (e > nn) e = nn; nn -= e; /* copy to new buffer to prevent possible overwrite */ - if (w - dd >= e) { /* (this test assumes unsigned comparison) */ + if (delta >= e) { memcpy(gunzip_window + w, gunzip_window + dd, e); w += e; dd += e; -- cgit v1.2.3