OSDN Git Service

When filling the bit buffer, gzip decompression apparently never checked for end...
authorManuel Novoa III <mjn3@codepoet.org>
Tue, 1 Mar 2005 19:29:29 +0000 (19:29 -0000)
committerManuel Novoa III <mjn3@codepoet.org>
Tue, 1 Mar 2005 19:29:29 +0000 (19:29 -0000)
archival/libunarchive/decompress_unzip.c

index e8cf54b..b17065d 100644 (file)
@@ -151,7 +151,10 @@ static unsigned int fill_bitbuffer(unsigned int bitbuffer, unsigned int *current
                        /* Leave the first 4 bytes empty so we can always unwind the bitbuffer
                         * to the front of the bytebuffer, leave 4 bytes free at end of tail
                         * so we can easily top up buffer in check_trailer_gzip() */
-                       bytebuffer_size = 4 + bb_xread(gunzip_src_fd, &bytebuffer[4], bytebuffer_max - 8);
+                       if (!(bytebuffer_size = bb_xread(gunzip_src_fd, &bytebuffer[4], bytebuffer_max - 8))) {
+                               bb_error_msg_and_die("unexpected end of file");
+                       }
+                       bytebuffer_size += 4;
                        bytebuffer_offset = 4;
                }
                bitbuffer |= ((unsigned int) bytebuffer[bytebuffer_offset]) << *current;