From b546d8bc2bfa0e20bdd14181a29a91ba31df2f0e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 26 Jun 2017 09:39:59 -0400 Subject: [PATCH 1/2] Try a little harder to make sure we never call tor_compress_process wrong. --- src/or/buffers.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/or/buffers.c b/src/or/buffers.c index 3692ed4d08..12a6c0239b 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -2092,7 +2092,7 @@ fetch_from_buf_line(buf_t *buf, char *data_out, size_t *data_len) int write_to_buf_compress(buf_t *buf, tor_compress_state_t *state, const char *data, size_t data_len, - int done) + const int done) { char *next; size_t old_avail, avail; @@ -2114,8 +2114,10 @@ write_to_buf_compress(buf_t *buf, tor_compress_state_t *state, case TOR_COMPRESS_ERROR: return -1; case TOR_COMPRESS_OK: - if (data_len == 0) + if (data_len == 0) { + tor_assert_nonfatal(!done); over = 1; + } break; case TOR_COMPRESS_BUFFER_FULL: if (avail) { @@ -2124,6 +2126,11 @@ write_to_buf_compress(buf_t *buf, tor_compress_state_t *state, * whether were going to or not. */ need_new_chunk = 1; } + if (data_len == 0 && !done) { + /* We've consumed all the input data, though, so there's no + * point in forging ahead right now. */ + over = 1; + } break; } buf->datalen += old_avail - avail; From 50be4600ae14687b9f4901b4d38a5dce644f5648 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 27 Jun 2017 10:31:03 -0400 Subject: [PATCH 2/2] changes file for bug 22719 --- changes/bug22719 | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 changes/bug22719 diff --git a/changes/bug22719 b/changes/bug22719 new file mode 100644 index 0000000000..bfcda0a4e1 --- /dev/null +++ b/changes/bug22719 @@ -0,0 +1,7 @@ + o Minor bugfixes (compression): + - When spooling compressed data to an output buffer, don't try to + spool more data when there is no more data to spool and we are + not trying to flush the input. Previously, we would sometimes + launch compression requests with nothing to do, which interferes + with our 22672 checks. Fixes bug 22719; bugfix on 0.2.0.16-alpha. +