fix urldb numerical v6 address handling
This commit is contained in:
parent
089179a5b1
commit
2406acfeb3
|
@ -634,6 +634,7 @@ static bool urldb__host_is_ip_address(const char *host)
|
|||
#ifndef NO_IPV6
|
||||
struct in6_addr ipv6;
|
||||
char ipv6_addr[64];
|
||||
unsigned int ipv6_addr_len;
|
||||
#endif
|
||||
/**
|
||||
* @todo FIXME Some parts of urldb.c make confusions between hosts
|
||||
|
@ -660,7 +661,7 @@ static bool urldb__host_is_ip_address(const char *host)
|
|||
char *c = strdup(host);
|
||||
c[slash - host] = '\0';
|
||||
sane_host = c;
|
||||
host_len = slash - host - 1;
|
||||
host_len = slash - host;
|
||||
LOG("WARNING: called with non-host '%s'", host);
|
||||
}
|
||||
|
||||
|
@ -688,11 +689,18 @@ static bool urldb__host_is_ip_address(const char *host)
|
|||
}
|
||||
|
||||
#ifndef NO_IPV6
|
||||
if (sane_host[0] != '[' || sane_host[host_len] != ']')
|
||||
if ((host_len < 6) ||
|
||||
(sane_host[0] != '[') ||
|
||||
(sane_host[host_len - 1] != ']')) {
|
||||
goto out_false;
|
||||
}
|
||||
|
||||
strncpy(ipv6_addr, sane_host + 1, sizeof(ipv6_addr));
|
||||
ipv6_addr[sizeof(ipv6_addr) - 1] = '\0';
|
||||
ipv6_addr_len = host_len - 2;
|
||||
if (ipv6_addr_len > sizeof(ipv6_addr)) {
|
||||
ipv6_addr_len = sizeof(ipv6_addr);
|
||||
}
|
||||
strncpy(ipv6_addr, sane_host + 1, ipv6_addr_len);
|
||||
ipv6_addr[ipv6_addr_len] = '\0';
|
||||
|
||||
if (inet_pton(AF_INET6, ipv6_addr, &ipv6) == 1)
|
||||
goto out_true;
|
||||
|
|
|
@ -808,7 +808,7 @@ START_TEST(urldb_iterate_partial_numeric_v6_test)
|
|||
nsurl *url;
|
||||
|
||||
cb_count = 0;
|
||||
urldb_iterate_partial("[2001:db8:1f70::999:de8:7648:6e8]/",
|
||||
urldb_iterate_partial("[2001:db8:1f70::999:de8:7648:6e8]",
|
||||
urldb_iterate_entries_cb);
|
||||
ck_assert_int_eq(cb_count, 0);
|
||||
|
||||
|
@ -817,9 +817,20 @@ START_TEST(urldb_iterate_partial_numeric_v6_test)
|
|||
nsurl_unref(url);
|
||||
|
||||
cb_count = 0;
|
||||
urldb_iterate_partial("[2001:db8:1f70::999:de8:7648:6e8]/",
|
||||
urldb_iterate_partial("[2001:db8:1f70::999:de8:7648:6e8]/index.wrong",
|
||||
urldb_iterate_entries_cb);
|
||||
ck_assert_int_eq(cb_count, 0);
|
||||
|
||||
cb_count = 0;
|
||||
urldb_iterate_partial("[2001:db8:1f70::999:de8:7648:6e8]",
|
||||
urldb_iterate_entries_cb);
|
||||
ck_assert_int_eq(cb_count, 1);
|
||||
|
||||
cb_count = 0;
|
||||
urldb_iterate_partial("[2001:db8:1f70::999:de8:7648:6e8]/in",
|
||||
urldb_iterate_entries_cb);
|
||||
ck_assert_int_eq(cb_count, 1);
|
||||
|
||||
}
|
||||
END_TEST
|
||||
|
||||
|
|
Loading…
Reference in New Issue