From: Nick Mathewson Date: Sat, 5 Feb 2005 21:03:24 +0000 (+0000) Subject: Fix tor-resolve implementation to prevent crashes and send resolves when we should. X-Git-Tag: tor-0.1.0.1-rc~307 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=322c728e978c3c2ad30d8b56de714029052cc070;p=thirdparty%2Ftor.git Fix tor-resolve implementation to prevent crashes and send resolves when we should. svn:r3561 --- diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 17b9cc41dd..e67be3dfcf 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -904,18 +904,17 @@ int connection_exit_begin_resolve(cell_t *cell, circuit_t *circ) { dummy_conn->state = EXIT_CONN_STATE_RESOLVEFAILED; dummy_conn->purpose = EXIT_PURPOSE_RESOLVE; - dummy_conn->next_stream = circ->resolving_streams; - circ->resolving_streams = dummy_conn; - /* send it off to the gethostbyname farm */ switch (dns_resolve(dummy_conn)) { case 1: /* The result was cached; a resolved cell was sent. */ - case -1: - /* dummy_conn got freed, don't touch it */ + case -1: /* Impossible to resolve; a resolved cell was sent. */ + connection_free(dummy_conn); return 0; case 0: /* resolve added to pending list */ + dummy_conn->next_stream = circ->resolving_streams; + circ->resolving_streams = dummy_conn; assert_circuit_ok(circ); - ; + break; } return 0; } diff --git a/src/or/dns.c b/src/or/dns.c index 5e68c63f9d..7b23f60ea9 100644 --- a/src/or/dns.c +++ b/src/or/dns.c @@ -216,6 +216,8 @@ int dns_resolve(connection_t *exitconn) { * know the answer. */ if (tor_inet_aton(exitconn->address, &in) != 0) { exitconn->addr = ntohl(in.s_addr); + if (exitconn->purpose == EXIT_PURPOSE_RESOLVE) + send_resolved_cell(exitconn, RESOLVED_TYPE_IPV4); return 1; }