From d915b18c65aa5d1ca364ec2f7b04c226b2e89d30 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Thu, 29 Jul 2021 09:52:36 +0200 Subject: [PATCH] [Compression] Correctly try to reallocate only when no output data. This is a fix of bug introduced with commit a7201ce. Fix #578 --- src/compression.h | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/compression.h b/src/compression.h index 53e2a41bc..dad2c98bd 100644 --- a/src/compression.h +++ b/src/compression.h @@ -234,16 +234,19 @@ class Compressor } case CompStatus::STREAM_END: return RunnerStatus::NEED_MORE; - case CompStatus::BUF_ERROR: { - //Not enought output size - ret_size *= 2; - std::unique_ptr new_ret_data(new char[ret_size]); - memcpy(new_ret_data.get(), ret_data.get(), stream.total_out); - stream.next_out = (unsigned char*)(new_ret_data.get() + stream.total_out); - stream.avail_out = ret_size - stream.total_out; - ret_data = std::move(new_ret_data); - continue; - } + case CompStatus::BUF_ERROR: + if (stream.avail_out == 0) { + //Not enought output size + ret_size *= 2; + std::unique_ptr new_ret_data(new char[ret_size]); + memcpy(new_ret_data.get(), ret_data.get(), stream.total_out); + stream.next_out = (unsigned char*)(new_ret_data.get() + stream.total_out); + stream.avail_out = ret_size - stream.total_out; + ret_data = std::move(new_ret_data); + continue; + } else { + return RunnerStatus::ERROR; + } break; default: // unreachable