From: George Kadianakis Date: Mon, 5 Aug 2013 16:08:14 +0000 (+0300) Subject: Fix some #5040 bugs found by Nick's tests. X-Git-Tag: tor-0.2.5.1-alpha~67^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=794447d03db263a0b887db53fc6bcd2c8d24eb71;p=thirdparty%2Ftor.git Fix some #5040 bugs found by Nick's tests. - Set conn->address when we receive a USERADDR command. - Set conn->state to a sane value when we transition from Extended ORPort to ORPort. --- diff --git a/src/or/ext_orport.c b/src/or/ext_orport.c index fdcecacda2..d5a0fa1ee4 100644 --- a/src/or/ext_orport.c +++ b/src/or/ext_orport.c @@ -80,6 +80,7 @@ connection_ext_or_transition(or_connection_t *conn) tor_assert(conn->base_.type == CONN_TYPE_EXT_OR); conn->base_.type = CONN_TYPE_OR; + TO_CONN(conn)->state = 0; // set the state to a neutral value control_event_or_conn_status(conn, OR_CONN_EVENT_NEW, 0); connection_tls_start_handshake(conn, 1); } @@ -474,6 +475,10 @@ connection_ext_or_handle_cmd_useraddr(connection_t *conn, /* record the address */ tor_addr_copy(&conn->addr, &addr); conn->port = port; + if (conn->address) { + tor_free(conn->address); + } + conn->address = tor_dup_addr(&addr); return 0; } diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c index e76808fa9c..b32ca35ffb 100644 --- a/src/test/test_extorport.c +++ b/src/test/test_extorport.c @@ -505,10 +505,7 @@ test_ext_or_handshake(void *arg) tt_int_op(is_reading,==,1); tt_int_op(handshake_start_called,==,1); tt_int_op(TO_CONN(conn)->type, ==, CONN_TYPE_OR); - /* XXXXX the state is now nonsensical! It should be set to something - * neutral (zero?) before we connection_or_change_state; right now - * it's EXT_OR_CONN_STATE_FLUSHING */ - /* tt_int_op(TO_CONN(conn)->state, ==, 0); XXXX */ + tt_int_op(TO_CONN(conn)->state, ==, 0); done: UNMOCK(connection_write_to_buf_impl_);