Fix bracketed IPv6 string validation

This commit is contained in:
rl1987 2018-02-12 19:52:47 +01:00 committed by Nick Mathewson
parent df529c6093
commit b0ba4aa7e9
2 changed files with 15 additions and 2 deletions

View File

@ -1079,9 +1079,22 @@ string_is_valid_ipv6_address(const char *string)
int int
string_is_valid_dest(const char *string) 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_ipv6_address(string) ||
string_is_valid_hostname(string); string_is_valid_hostname(string);
tor_free(tmp);
return retval;
} }
/** Return true iff <b>string</b> matches a pattern of DNS names /** Return true iff <b>string</b> matches a pattern of DNS names

View File

@ -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, "[2001:0db8:85a3:0000:0000:8a2e:0370:7334]");
ADD_DATA(buf, "\x01\x02"); ADD_DATA(buf, "\x01\x02");
tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, 1), 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, tt_str_op("[2001:0db8:85a3:0000:0000:8a2e:0370:7334]", OP_EQ,
socks->address); socks->address);