Просмотр исходного кода

Merge branch 'bug22719_031' into maint-0.3.1

Nick Mathewson 6 лет назад
Родитель
Сommit
fd16dd2608
2 измененных файлов с 16 добавлено и 2 удалено
  1. 7 0
      changes/bug22719
  2. 9 2
      src/or/buffers.c

+ 7 - 0
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.
+

+ 9 - 2
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;