[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] Fix tor-resolve implementation to prevent crashes and send ...



Update of /home/or/cvsroot/tor/src/or
In directory moria.mit.edu:/tmp/cvs-serv29573/src/or

Modified Files:
	connection_edge.c dns.c 
Log Message:
Fix tor-resolve implementation to prevent crashes and send resolves when we should.

Index: connection_edge.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/connection_edge.c,v
retrieving revision 1.273
retrieving revision 1.274
diff -u -d -r1.273 -r1.274
--- connection_edge.c	4 Feb 2005 01:49:58 -0000	1.273
+++ connection_edge.c	5 Feb 2005 21:03:24 -0000	1.274
@@ -904,18 +904,17 @@
   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;
 }

Index: dns.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/dns.c,v
retrieving revision 1.134
retrieving revision 1.135
diff -u -d -r1.134 -r1.135
--- dns.c	4 Feb 2005 01:49:58 -0000	1.134
+++ dns.c	5 Feb 2005 21:03:24 -0000	1.135
@@ -216,6 +216,8 @@
    * 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;
   }