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:
parent
f2aca1970f
commit
dbb04e883d
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user