瀏覽代碼

count DATA cells with stream ID 0 as delivered for SENDME purposes

Found while investigating 8093, but probably not the cause of it,
since this bug would result in us sending too few SENDMEs, not in us
receiving SENDMEs unexpectedly.

Bugfix on the fix for 7889, which has appeared in 0.2.4.10-alpha, but
not yet in any released 0.2.3.x version.
Nick Mathewson 11 年之前
父節點
當前提交
2e1f23151c
共有 2 個文件被更改,包括 10 次插入2 次删除
  1. 5 0
      changes/not_bug_8093
  2. 5 2
      src/or/relay.c

+ 5 - 0
changes/not_bug_8093

@@ -0,0 +1,5 @@
+  o Minor bugfixes:
+    - When rejecting DATA cells for stream_id zero, still count them against
+      the circuit's deliver window so that we don't get fail to send a
+      SENDME.  Fix related to but probably not the cause of bug 8093; bugfix
+      on 0.2.4.10-alpha.

+ 5 - 2
src/or/relay.c

@@ -1050,7 +1050,6 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
     switch (rh.command) {
       case RELAY_COMMAND_BEGIN:
       case RELAY_COMMAND_CONNECTED:
-      case RELAY_COMMAND_DATA:
       case RELAY_COMMAND_END:
       case RELAY_COMMAND_RESOLVE:
       case RELAY_COMMAND_RESOLVED:
@@ -1135,7 +1134,11 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
 
       circuit_consider_sending_sendme(circ, layer_hint);
 
-      if (!conn) {
+      if (rh.stream_id == 0) {
+        log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, "Relay data cell with zero "
+               "stream_id. Dropping.");
+        return 0;
+      } else if (!conn) {
         log_info(domain,"data cell dropped, unknown stream (streamid %d).",
                  rh.stream_id);
         return 0;