+2000-12-18 Bryce McKinlay <bryce@albatross.co.nz>
+
+ * java/util/zip/natInflater.cc (inflate): Treat Z_BUF_ERROR as
+ end-of-stream if avail_in is 0.
+
2000-12-17 Bryce McKinlay <bryce@albatross.co.nz>
* java/util/ArrayList.java (data): Declare transient.
switch (::inflate (s, Z_SYNC_FLUSH))
{
+ case Z_BUF_ERROR:
+ /* Using the no_header option, zlib requires an extra padding byte at the
+ end of the stream in order to successfully complete decompression (see
+ zlib/contrib/minizip/unzip.c). We don't do this, so can end up with a
+ Z_BUF_ERROR at the end of a stream when zlib has completed inflation
+ and there's no more input. Thats not a problem. */
+ if (s->avail_in != 0)
+ throw new java::lang::InternalError;
+ // Fall through.
+
case Z_STREAM_END:
is_finished = true;
if (s->avail_out == (unsigned int) len)
_Jv_Throw (new java::lang::OutOfMemoryError);
break;
- case Z_BUF_ERROR:
- // FIXME?
- _Jv_Throw (new java::lang::InternalError);
- break;
-
case Z_OK:
break;
}