[git commit master] gunzip: inflate_codes(): add fix from upstream gzip to prevent false CRC error

Denys Vlasenko vda.linux at googlemail.com
Thu Feb 11 22:56:48 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=0866b369003fbf81f8f35eb15360a628b3f3aa9a
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund at transmode.se>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 archival/libunarchive/decompress_unzip.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c
index feaa047..33e877e 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;
-- 
1.6.3.3



More information about the busybox-cvs mailing list