Try a little harder to make sure we never call tor_compress_process wrong.

This commit is contained in:
Nick Mathewson 2017-06-26 09:39:59 -04:00
parent 2c49a9852d
commit b546d8bc2b

View file

@ -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;