From 322c728e978c3c2ad30d8b56de714029052cc070 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sat, 5 Feb 2005 21:03:24 +0000 Subject: [PATCH] Fix tor-resolve implementation to prevent crashes and send resolves when we should. svn:r3561 --- src/or/connection_edge.c | 11 +++++------ src/or/dns.c | 2 ++ 2 files changed, 7 insertions(+), 6 deletions(-) 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; }