using (var unZippedStream = new StreamReader (gZipStream, Encoding.UTF8)) {
unZipped = unZippedStream.ReadToEnd ();
}
+
+ Assert.AreEqual(1877, unZipped.Length);
+ }
+
+ [Test]
+ public void Bug44994_Inflate()
+ {
+ var base64String = @"7cWxCQAgDACwpeBjgqsgXiHU0fd9QzBLErX1EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADepcxcuU/atm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm3btm37zy8=";
+
+ byte[] byteArray = Convert.FromBase64String(base64String);
+ string unZipped = null;
+
+ using (var zippedMemoryStream = new MemoryStream(byteArray))
+ using (var gZipStream = new DeflateStream(zippedMemoryStream, CompressionMode.Decompress))
+ using (var unzippedMemStream = new MemoryStream())
+ using (var unZippedStream = new StreamReader(gZipStream, Encoding.UTF8))
+ {
+ unZipped = unZippedStream.ReadToEnd();
+ }
+
+ Assert.AreEqual(81942, unZipped.Length);
}
}
}
zs->avail_in = n < 0 ? 0 : n;
}
- if (zs->avail_in == 0 && (zs->total_in == 0 || stream->total_in == zs->total_in))
- return Z_STREAM_END;
+ if (zs->avail_in == 0 && zs->total_in == 0)
+ return 0;
status = inflate (stream->stream, Z_SYNC_FLUSH);
if (status == Z_STREAM_END) {
stream->eof = TRUE;
break;
+ } else if (status == Z_BUF_ERROR && stream->total_in == zs->total_in) {
+ stream->eof = TRUE;
+ break;
} else if (status != Z_OK) {
return status;
}