Browse Source

Fix a segfault

svn:r4191
Nick Mathewson 20 years ago
parent
commit
776b411dc9
1 changed files with 10 additions and 9 deletions
  1. 10 9
      src/or/connection_edge.c

+ 10 - 9
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
     /* foo.exit -- modify conn->chosen_exit_node to specify the exit
      * node, and conn->address to hold only the address portion.*/
      * node, and conn->address to hold only the address portion.*/
     char *s = strrchr(socks->address,'.');
     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 {
     } else {
-      tor_assert(!s); /* address is of the form server.exit. */
       struct in_addr in;
       struct in_addr in;
       routerinfo_t *r = router_get_by_nickname(socks->address);
       routerinfo_t *r = router_get_by_nickname(socks->address);
       if (r) {
       if (r) {