summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrl1987 <rl1987@sdf.lonestar.org>2018-02-12 19:52:47 +0100
committerNick Mathewson <nickm@torproject.org>2018-03-28 07:39:03 -0400
commitb0ba4aa7e98af030e0e1be19a58ab7a6f00fa423 (patch)
tree2d7baf06082aa409c25252a068f6c560eedd2923
parentdf529c60936ef290c917d09d51820680cd31cc8b (diff)
downloadtor-b0ba4aa7e98af030e0e1be19a58ab7a6f00fa423.tar.gz
tor-b0ba4aa7e98af030e0e1be19a58ab7a6f00fa423.zip
Fix bracketed IPv6 string validation
-rw-r--r--src/common/util.c15
-rw-r--r--src/test/test_socks.c2
2 files changed, 15 insertions, 2 deletions
diff --git a/src/common/util.c b/src/common/util.c
index 7c715fb3cd..ea0ec3daee 100644
--- a/src/common/util.c
+++ b/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
diff --git a/src/test/test_socks.c b/src/test/test_socks.c
index 70509e43e7..3f9cc887b6 100644
--- a/src/test/test_socks.c
+++ b/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);