Преглед на файлове

Treat Z_BUF_ERROR as TOR_ZLIB_BUF_FULL when finalizing a zlib buffer

Otherwise, when we're out of input *and* finalizing, we might report
TOR_ZLIB_OK erroneously and not finalize the buffer.

(I don't believe this can happen in practice, with our code today:
write_to_buf_zlib ensures that we are never trying to write into a
completely empty buffer, and zlib says "Z_OK" if you give it even
one byte to write into.)

Fixes bug 11824; bugfix on 0.1.1.23 (06e09cdd47eaa8f7e90ce2).
Nick Mathewson преди 10 години
родител
ревизия
7573e66b99
променени са 2 файла, в които са добавени 6 реда и са изтрити 1 реда
  1. 5 0
      changes/bug11824
  2. 1 1
      src/common/torgzip.c

+ 5 - 0
changes/bug11824

@@ -0,0 +1,5 @@
+  o Minor bugfixes:
+    - When trying to finalize a zlib stream where we have already
+      exhausted all the input bytes and we need more bytes in the
+      output buffer, do not report the the write as successful.
+      Fixes bug 11824; bugfix on 0.1.1.23.

+ 1 - 1
src/common/torgzip.c

@@ -480,7 +480,7 @@ tor_zlib_process(tor_zlib_state_t *state,
     case Z_STREAM_END:
       return TOR_ZLIB_DONE;
     case Z_BUF_ERROR:
-      if (state->stream.avail_in == 0)
+      if (state->stream.avail_in == 0 && !finish)
         return TOR_ZLIB_OK;
       return TOR_ZLIB_BUF_FULL;
     case Z_OK: