diff --git a/src/ZlibDecompressor.cpp b/src/ZlibDecompressor.cpp index d6b6514..0f9a544 100644 --- a/src/ZlibDecompressor.cpp +++ b/src/ZlibDecompressor.cpp @@ -48,16 +48,17 @@ void ZlibDecompressor::decompress(ustring &buffer) strm.next_in = const_cast(data); strm.avail_in = size; - buffer.resize(BUFSIZE); + if (buffer.empty()) + buffer.resize(BUFSIZE); strm.next_out = &buffer[0]; - strm.avail_out = BUFSIZE; + strm.avail_out = buffer.size(); int ret = 0; do { ret = Z(inflate)(&strm, Z_NO_FLUSH); if (strm.avail_out == 0) { const auto off = buffer.size(); - buffer.reserve(off + BUFSIZE); + buffer.resize(off + BUFSIZE); strm.next_out = &buffer[off]; strm.avail_out = BUFSIZE; } diff --git a/src/ZstdDecompressor.cpp b/src/ZstdDecompressor.cpp index 6e2c62f..879aa37 100644 --- a/src/ZstdDecompressor.cpp +++ b/src/ZstdDecompressor.cpp @@ -29,7 +29,8 @@ void ZstdDecompressor::decompress(ustring &buffer) // output space is extended in chunks of this size constexpr size_t BUFSIZE = 8 * 1024; - buffer.resize(BUFSIZE); + if (buffer.empty()) + buffer.resize(BUFSIZE); ZSTD_outBuffer outbuf = { &buffer[0], buffer.size(), 0 }; ZSTD_initDStream(stream);