mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-23 22:47:12 +01:00
Fix tor-resolve implementation to prevent crashes and send resolves when we should.
svn:r3561
This commit is contained in:
parent
0ff41a3b37
commit
322c728e97
2 changed files with 7 additions and 6 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue