[tor-commits] [tor/master] Treat Z_BUF_ERROR as TOR_ZLIB_BUF_FULL when finalizing a zlib buffer

nickm at torproject.org nickm at torproject.org
Wed Oct 22 15:04:35 UTC 2014

commit 7573e66b9961cdb571c3c7af688fd01912e66455
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Jun 3 20:38:00 2014 -0400

    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 (06e09cdd47eaa8f7e90ce2).
 changes/bug11824     |    5 +++++
 src/common/torgzip.c |    2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/changes/bug11824 b/changes/bug11824
new file mode 100644
index 0000000..1eb89ca
--- /dev/null
+++ b/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
diff --git a/src/common/torgzip.c b/src/common/torgzip.c
index 4328c63..778cbe9 100644
--- a/src/common/torgzip.c
+++ b/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:

More information about the tor-commits mailing list