Ver código fonte

Improve bracket handling in tor_addr_parse()

* Actually check for second bracket
* Only attempt parsing IPv4 address when no brackets found
rl1987 7 anos atrás
pai
commit
23ed863da4
1 arquivos alterados com 7 adições e 2 exclusões
  1. 7 2
      src/lib/net/address.c

+ 7 - 2
src/lib/net/address.c

@@ -1187,14 +1187,19 @@ tor_addr_parse(tor_addr_t *addr, const char *src)
   int result;
   struct in_addr in_tmp;
   struct in6_addr in6_tmp;
+  int brackets_detected = 0;
+
   tor_assert(addr && src);
-  if (src[0] == '[' && src[1])
+  if (src[0] == '[' && src[1] && src[strlen(src)-1] == ']') {
+    brackets_detected = 1;
     src = tmp = tor_strndup(src+1, strlen(src)-2);
+  }
 
   if (tor_inet_pton(AF_INET6, src, &in6_tmp) > 0) {
     result = AF_INET6;
     tor_addr_from_in6(addr, &in6_tmp);
-  } else if (tor_inet_pton(AF_INET, src, &in_tmp) > 0) {
+  } else if (!brackets_detected &&
+             tor_inet_pton(AF_INET, src, &in_tmp) > 0) {
     result = AF_INET;
     tor_addr_from_in(addr, &in_tmp);
   } else {