Fix broken buffer handling in ZlibDecompressor

40a5e16e21ba9a0663fc93919291c1bf0e5c2e3a added the broken reserve() call
and only by chance did 0a56b18cfbb583649bdbc7f0a379df5d63ea2880 not break
it further because I forgot to remove the unconditional resize().

I should read my own code changes more often.
This commit is contained in:
sfan5 2025-04-07 23:20:08 +02:00
parent 314debe4fb
commit 9367e45e66
2 changed files with 6 additions and 4 deletions

View File

@ -48,16 +48,17 @@ void ZlibDecompressor::decompress(ustring &buffer)
strm.next_in = const_cast<unsigned char *>(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;
}

View File

@ -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);