diff options
-rw-r--r-- | src/or/connection_edge.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index d49e68931d..adcaa64578 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -915,16 +915,17 @@ static int connection_ap_handshake_process_socks(connection_t *conn) { /* foo.exit -- modify conn->chosen_exit_node to specify the exit * node, and conn->address to hold only the address portion.*/ char *s = strrchr(socks->address,'.'); - if (s && s[1] != '\0') { - conn->chosen_exit_name = tor_strdup(s+1); - *s = 0; - } else if (s[1] == '\0') { - log_fn(LOG_WARN,"Malformed exit address '%s.exit'. Refusing.", - safe_str(socks->address)); - connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); - return -1; + if (s) { + if (s[1] != '\0') { + conn->chosen_exit_name = tor_strdup(s+1); + *s = 0; + } else { + log_fn(LOG_WARN,"Malformed exit address '%s.exit'. Refusing.", + safe_str(socks->address)); + connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); + return -1; + } } else { - tor_assert(!s); /* address is of the form server.exit. */ struct in_addr in; routerinfo_t *r = router_get_by_nickname(socks->address); if (r) { |