mirror of
https://github.com/minetest/minetestmapper.git
synced 2025-09-08 09:35:40 +02:00
Fix broken buffer handling in ZlibDecompressor
40a5e16e21
added the broken reserve() call and only by chance did0a56b18cfb
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:
@@ -48,16 +48,17 @@ void ZlibDecompressor::decompress(ustring &buffer)
|
|||||||
|
|
||||||
strm.next_in = const_cast<unsigned char *>(data);
|
strm.next_in = const_cast<unsigned char *>(data);
|
||||||
strm.avail_in = size;
|
strm.avail_in = size;
|
||||||
buffer.resize(BUFSIZE);
|
if (buffer.empty())
|
||||||
|
buffer.resize(BUFSIZE);
|
||||||
strm.next_out = &buffer[0];
|
strm.next_out = &buffer[0];
|
||||||
strm.avail_out = BUFSIZE;
|
strm.avail_out = buffer.size();
|
||||||
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
do {
|
do {
|
||||||
ret = Z(inflate)(&strm, Z_NO_FLUSH);
|
ret = Z(inflate)(&strm, Z_NO_FLUSH);
|
||||||
if (strm.avail_out == 0) {
|
if (strm.avail_out == 0) {
|
||||||
const auto off = buffer.size();
|
const auto off = buffer.size();
|
||||||
buffer.reserve(off + BUFSIZE);
|
buffer.resize(off + BUFSIZE);
|
||||||
strm.next_out = &buffer[off];
|
strm.next_out = &buffer[off];
|
||||||
strm.avail_out = BUFSIZE;
|
strm.avail_out = BUFSIZE;
|
||||||
}
|
}
|
||||||
|
@@ -29,7 +29,8 @@ void ZstdDecompressor::decompress(ustring &buffer)
|
|||||||
// output space is extended in chunks of this size
|
// output space is extended in chunks of this size
|
||||||
constexpr size_t BUFSIZE = 8 * 1024;
|
constexpr size_t BUFSIZE = 8 * 1024;
|
||||||
|
|
||||||
buffer.resize(BUFSIZE);
|
if (buffer.empty())
|
||||||
|
buffer.resize(BUFSIZE);
|
||||||
ZSTD_outBuffer outbuf = { &buffer[0], buffer.size(), 0 };
|
ZSTD_outBuffer outbuf = { &buffer[0], buffer.size(), 0 };
|
||||||
|
|
||||||
ZSTD_initDStream(stream);
|
ZSTD_initDStream(stream);
|
||||||
|
Reference in New Issue
Block a user