commit fd16dd2608ba3a1f97fb13bf7ae3b6640e90376a
parent 32596016a2a16fcbfa9b201b2f3a5437a46dad17
Author: Nick Mathewson <nickm@torproject.org>
Date: Tue, 27 Jun 2017 10:31:33 -0400
Merge branch 'bug22719_031' into maint-0.3.1
Diffstat:
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/changes/bug22719 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.
+
diff --git 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;