aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2001-11-29 06:36:56 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2001-11-29 06:36:56 +0000
commit38288bbf4cb26be1d1b3ee9175666d6819892a9e (patch)
tree066a61cd46f32b2aab2012e405e7ee1cbbc7898c
parent8a35c9a5575a32cebf0f160f77fada930dcffc5d (diff)
downloadbusybox-w32-38288bbf4cb26be1d1b3ee9175666d6819892a9e.tar.gz
busybox-w32-38288bbf4cb26be1d1b3ee9175666d6819892a9e.tar.bz2
busybox-w32-38288bbf4cb26be1d1b3ee9175666d6819892a9e.zip
gunzip was incorrectly reporting a failed crc and length (discovered by
Chang, Shu-Hao). The bitbuffer needs to be unwound after decompression, as it was eating into the crc/size field.
-rw-r--r--archival/libunarchive/decompress_unzip.c8
-rw-r--r--archival/libunarchive/unzip.c8
-rw-r--r--libbb/unzip.c8
3 files changed, 24 insertions, 0 deletions
diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c
index bb32891be..69cc8198b 100644
--- a/archival/libunarchive/decompress_unzip.c
+++ b/archival/libunarchive/decompress_unzip.c
@@ -875,6 +875,14 @@ static int inflate(void)
875 } 875 }
876 } while (!e); 876 } while (!e);
877 877
878 /* Undo too much lookahead. The next read will be byte aligned so we
879 * can discard unused bits in the last meaningful byte.
880 */
881 while (bk >= 8) {
882 bk -= 8;
883 ungetc((bb << bk), in_file);
884 }
885
878 /* flush out window */ 886 /* flush out window */
879 flush_window(); 887 flush_window();
880 888
diff --git a/archival/libunarchive/unzip.c b/archival/libunarchive/unzip.c
index bb32891be..69cc8198b 100644
--- a/archival/libunarchive/unzip.c
+++ b/archival/libunarchive/unzip.c
@@ -875,6 +875,14 @@ static int inflate(void)
875 } 875 }
876 } while (!e); 876 } while (!e);
877 877
878 /* Undo too much lookahead. The next read will be byte aligned so we
879 * can discard unused bits in the last meaningful byte.
880 */
881 while (bk >= 8) {
882 bk -= 8;
883 ungetc((bb << bk), in_file);
884 }
885
878 /* flush out window */ 886 /* flush out window */
879 flush_window(); 887 flush_window();
880 888
diff --git a/libbb/unzip.c b/libbb/unzip.c
index bb32891be..69cc8198b 100644
--- a/libbb/unzip.c
+++ b/libbb/unzip.c
@@ -875,6 +875,14 @@ static int inflate(void)
875 } 875 }
876 } while (!e); 876 } while (!e);
877 877
878 /* Undo too much lookahead. The next read will be byte aligned so we
879 * can discard unused bits in the last meaningful byte.
880 */
881 while (bk >= 8) {
882 bk -= 8;
883 ungetc((bb << bk), in_file);
884 }
885
878 /* flush out window */ 886 /* flush out window */
879 flush_window(); 887 flush_window();
880 888