Better error handling when trying to compress/decompress into empty buffer.

This patch ensures that we return TOR_COMPRESS_BUFFER_FULL in case we
have a input bytes left to process, but are out of output buffer or in
case we need to finish where the compression implementation might need
to write an epilogue.

See: https://bugs.torproject.org/23551
This commit is contained in:
Alexander Færøy 2017-09-28 16:46:10 +02:00
parent 7f3dc8327a
commit 8d6940814a
No known key found for this signature in database
GPG Key ID: E15081D5D3C3DB53
2 changed files with 10 additions and 0 deletions

3
changes/bug23551 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (compression):
- Handle a pathological case when decompressing Zstandard data when the
output buffer size is zero. Fixes bug 23551; bugfix on 0.3.1.1-alpha.

View File

@ -546,6 +546,13 @@ tor_compress_process(tor_compress_state_t *state,
const size_t out_len_orig = *out_len;
tor_compress_output_t rv;
if (*out_len == 0 && (*in_len > 0 || finish)) {
// If we still have input data, but no space for output data, we might as
// well return early and let the caller do the reallocation of the out
// variable.
return TOR_COMPRESS_BUFFER_FULL;
}
switch (state->method) {
case GZIP_METHOD:
case ZLIB_METHOD: