Unverified Commit 44dc4b73 authored by Alexander Hansen Færøy's avatar Alexander Hansen Færøy 💬
Browse files

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
parent c3b7f9d7
Loading
Loading
Loading
Loading

changes/bug23551

0 → 100644
+3 −0
Original line number Original line Diff line number Diff line
  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.
+7 −0
Original line number Original line Diff line number Diff line
@@ -547,6 +547,13 @@ tor_compress_process(tor_compress_state_t *state,
  const size_t out_len_orig = *out_len;
  const size_t out_len_orig = *out_len;
  tor_compress_output_t rv;
  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) {
  switch (state->method) {
    case GZIP_METHOD:
    case GZIP_METHOD:
    case ZLIB_METHOD:
    case ZLIB_METHOD: