Browse Source

cleanup so connection_ap_handshake_attach_chosen_circuit() always
gets open circs.


svn:r3856

Roger Dingledine 20 years ago
parent
commit
09ef2b7e41
2 changed files with 5 additions and 3 deletions
  1. 1 3
      src/or/circuituse.c
  2. 4 0
      src/or/control.c

+ 1 - 3
src/or/circuituse.c

@@ -991,9 +991,7 @@ connection_ap_handshake_attach_chosen_circuit(connection_t *conn,
              conn->state == AP_CONN_STATE_CONTROLLER_WAIT);
   tor_assert(conn->socks_request);
   tor_assert(circ);
-
-  if (circ->state != CIRCUIT_STATE_OPEN)
-    return 0;
+  tor_assert(circ->state == CIRCUIT_STATE_OPEN);
 
   conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
 

+ 4 - 0
src/or/control.c

@@ -745,6 +745,10 @@ static int handle_control_attachstream(connection_t *conn, uint32_t len,
     send_control_error(conn, ERR_NO_CIRC, "No circuit found with given ID");
     return 0;
   }
+  if (circ->state != CIRCUIT_STATE_OPEN) {
+    send_control_error(conn, ERR_INTERNAL, "Refuse to attach stream to non-open circ.");
+    return 0;
+  }
   if (connection_ap_handshake_attach_chosen_circuit(ap_conn, circ) != 1) {
     send_control_error(conn, ERR_INTERNAL, "Unable to attach stream.");
     return 0;