diff --git a/src/or/circuituse.c b/src/or/circuituse.c index e9c20f59a8..22b9916818 100644 --- a/src/or/circuituse.c +++ b/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; diff --git a/src/or/control.c b/src/or/control.c index 28940e1d4d..47c0cc0e68 100644 --- a/src/or/control.c +++ b/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;