aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoakim Tjernlund <Joakim.Tjernlund@transmode.se>2010-02-08 18:55:15 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2010-02-11 23:56:48 +0100
commit0866b369003fbf81f8f35eb15360a628b3f3aa9a (patch)
tree2c1281842f3c91e822268045b57d7c9aadacdee6
parent80f4275629bd7f73776018cb3d06773a413bbbfb (diff)
downloadbusybox-w32-0866b369003fbf81f8f35eb15360a628b3f3aa9a.tar.gz
busybox-w32-0866b369003fbf81f8f35eb15360a628b3f3aa9a.tar.bz2
busybox-w32-0866b369003fbf81f8f35eb15360a628b3f3aa9a.zip
gunzip: inflate_codes(): add fix from upstream gzip to prevent false CRC error
Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--archival/libunarchive/decompress_unzip.c5
1 files changed, 4 insertions, 1 deletions
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)
575 do { 575 do {
576 /* Was: nn -= (e = (e = GUNZIP_WSIZE - ((dd &= GUNZIP_WSIZE - 1) > w ? dd : w)) > nn ? nn : e); */ 576 /* Was: nn -= (e = (e = GUNZIP_WSIZE - ((dd &= GUNZIP_WSIZE - 1) > w ? dd : w)) > nn ? nn : e); */
577 /* Who wrote THAT?? rewritten as: */ 577 /* Who wrote THAT?? rewritten as: */
578 unsigned delta;
579
578 dd &= GUNZIP_WSIZE - 1; 580 dd &= GUNZIP_WSIZE - 1;
579 e = GUNZIP_WSIZE - (dd > w ? dd : w); 581 e = GUNZIP_WSIZE - (dd > w ? dd : w);
582 delta = w > dd ? w - dd : dd - w;
580 if (e > nn) e = nn; 583 if (e > nn) e = nn;
581 nn -= e; 584 nn -= e;
582 585
583 /* copy to new buffer to prevent possible overwrite */ 586 /* copy to new buffer to prevent possible overwrite */
584 if (w - dd >= e) { /* (this test assumes unsigned comparison) */ 587 if (delta >= e) {
585 memcpy(gunzip_window + w, gunzip_window + dd, e); 588 memcpy(gunzip_window + w, gunzip_window + dd, e);
586 w += e; 589 w += e;
587 dd += e; 590 dd += e;