Browse Source

Check for stream_id, not conn, on extend cells.

Extend cells aren't allowed to have a stream_id, but we were only
blocking them when they had a stream_id that corresponded to a
connection.  As far as I can tell, this change is harmless: it will
make some kinds of broken clients not work any more, but afaik nobody
actually make a client that was broken in that way.

Found while hunting for other places where we made the same mistake
as in 6271.

Bugfix on d7f50337c14c back from May 2003, which introduced
telescoping circuit construction into 0.0.2pre8.
Nick Mathewson 11 years ago
parent
commit
cdd882ee71
2 changed files with 7 additions and 1 deletions
  1. 6 0
      changes/bug6271-related
  2. 1 1
      src/or/relay.c

+ 6 - 0
changes/bug6271-related

@@ -0,0 +1,6 @@
+  o Minor bugfixes (spec conformance):
+    - Reject EXTEND cells sent to nonexistent streams. According to the
+      spec, an EXTEND cell sent to _any_ nonzero stream ID is invalid, but
+      we were only checking for stream IDs that were currenty in use.
+      Found while hunting for more instances of bug 6271. Bugfix on
+      0.0.2pre8, which introduced incremental circuit construction.

+ 1 - 1
src/or/relay.c

@@ -1175,7 +1175,7 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
     case RELAY_COMMAND_EXTEND: {
       static uint64_t total_n_extend=0, total_nonearly=0;
       total_n_extend++;
-      if (conn) {
+      if (rh.stream_id) {
         log_fn(LOG_PROTOCOL_WARN, domain,
                "'extend' cell received for non-zero stream. Dropping.");
         return 0;