Quellcode durchsuchen

Fix bracketed IPv6 string validation

rl1987 vor 6 Jahren
Ursprung
Commit
b0ba4aa7e9
2 geänderte Dateien mit 15 neuen und 2 gelöschten Zeilen
  1. 14 1
      src/common/util.c
  2. 1 1
      src/test/test_socks.c

+ 14 - 1
src/common/util.c

@@ -1079,9 +1079,22 @@ string_is_valid_ipv6_address(const char *string)
 int
 string_is_valid_dest(const char *string)
 {
-  return string_is_valid_ipv4_address(string) ||
+  char *tmp = NULL;
+  int retval;
+
+  tor_assert(string);
+  tor_assert(strlen(string) > 0);
+
+  if (string[0] == '[' && string[strlen(string) - 1] == ']')
+    string = tmp = tor_strndup(string + 1, strlen(string) - 2);
+
+  retval = string_is_valid_ipv4_address(string) ||
     string_is_valid_ipv6_address(string) ||
     string_is_valid_hostname(string);
+
+  tor_free(tmp);
+
+  return retval;
 }
 
 /** Return true iff <b>string</b> matches a pattern of DNS names

+ 1 - 1
src/test/test_socks.c

@@ -355,7 +355,7 @@ test_socks_5_supported_commands(void *ptr)
   ADD_DATA(buf, "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]");
   ADD_DATA(buf, "\x01\x02");
   tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, 1),
-            OP_EQ, -1);
+            OP_EQ, 1);
 
   tt_str_op("[2001:0db8:85a3:0000:0000:8a2e:0370:7334]", OP_EQ,
     socks->address);