natInflater.cc (inflate): Treat Z_BUF_ERROR as end-of-stream if avail_in is 0.

* java/util/zip/natInflater.cc (inflate): Treat Z_BUF_ERROR as
        end-of-stream if avail_in is 0.

From-SVN: r38338
This commit is contained in:
Bryce McKinlay 2000-12-18 01:00:23 +00:00 committed by Bryce McKinlay
parent f2aca1970f
commit dbb04e883d
2 changed files with 15 additions and 5 deletions

View File

@ -1,3 +1,8 @@
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.

View File

@ -106,6 +106,16 @@ java::util::zip::Inflater::inflate (jbyteArray buf, jint off, jint len)
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)
@ -125,11 +135,6 @@ java::util::zip::Inflater::inflate (jbyteArray buf, jint off, jint len)
_Jv_Throw (new java::lang::OutOfMemoryError);
break;
case Z_BUF_ERROR:
// FIXME?
_Jv_Throw (new java::lang::InternalError);
break;
case Z_OK:
break;
}