From 192a140f620bc445e1e5c003b4b73aeec8300498 Mon Sep 17 00:00:00 2001 From: bryce Date: Mon, 18 Dec 2000 01:00:23 +0000 Subject: * java/util/zip/natInflater.cc (inflate): Treat Z_BUF_ERROR as end-of-stream if avail_in is 0. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@38338 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/java/util/zip/natInflater.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'libjava/java') diff --git a/libjava/java/util/zip/natInflater.cc b/libjava/java/util/zip/natInflater.cc index f3d258cdd59..a9768fce77d 100644 --- a/libjava/java/util/zip/natInflater.cc +++ b/libjava/java/util/zip/natInflater.cc @@ -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; } -- cgit v1.2.3