
commit 7573e66b9961cdb571c3c7af688fd01912e66455 Author: Nick Mathewson <nickm@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 0.1.1.23 (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 0.1.1.23. 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: