Merge pull request #2386 from BrzVlad/fix-jit
[mono.git] / support / zlib-helper.c
index 83455413b3647915ae8cc3cd0ac8e025cf5823be..dbfd1c7e24a27e7dd67283e6c1df7401b17d6100 100644 (file)
@@ -90,6 +90,8 @@ CreateZStream (gint compress, guchar gzip, read_write_func func, void *gchandle)
        result->gchandle = gchandle;
        result->compress = compress;
        result->buffer = g_new (guchar, BUFFER_SIZE);
+       result->stream->next_out = result->buffer;
+       result->stream->avail_out = BUFFER_SIZE;
        return result;
 }
 
@@ -148,7 +150,7 @@ flush_internal (ZStream *stream, gboolean is_final)
        if (!stream->compress)
                return 0;
 
-       if (!is_final) {
+       if (!is_final && stream->stream->avail_in != 0) {
                status = deflate (stream->stream, Z_PARTIAL_FLUSH);
                if (status != Z_OK && status != Z_STREAM_END)
                        return status;
@@ -185,7 +187,7 @@ ReadZStream (ZStream *stream, guchar *buffer, gint length)
                                stream->eof = TRUE;
                        }
                        zs->next_in = stream->buffer;
-                       zs->avail_in = n;
+                       zs->avail_in = n < 0 ? 0 : n;
                }
 
                if (zs->avail_in == 0 && zs->total_in == 0)