diff options
author | Alexander Færøy <ahf@torproject.org> | 2017-09-28 16:46:10 +0200 |
---|---|---|
committer | Alexander Færøy <ahf@torproject.org> | 2017-09-28 20:17:41 +0200 |
commit | 8d6940814a90166e468cee810820e8fc5b74e89d (patch) | |
tree | 555feb54ab200546286311d271e31e0d027b2024 /src/common | |
parent | 7f3dc8327ac1f6b4a0ec377b5ec04e279b682cab (diff) | |
download | tor-8d6940814a90166e468cee810820e8fc5b74e89d.tar.gz tor-8d6940814a90166e468cee810820e8fc5b74e89d.zip |
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
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/compress.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/common/compress.c b/src/common/compress.c index 7926faaa60..beeff5fcb8 100644 --- a/src/common/compress.c +++ b/src/common/compress.c @@ -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: |