Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/2406acfeb347da3d4957627cdb70e2583c03aee7
...commit
http://git.netsurf-browser.org/netsurf.git/commit/2406acfeb347da3d4957627cdb70e2583c03aee7
...tree
http://git.netsurf-browser.org/netsurf.git/tree/2406acfeb347da3d4957627cdb70e2583c03aee7
The branch, master has been updated
via 2406acfeb347da3d4957627cdb70e2583c03aee7 (commit)
from 089179a5b1590e5519d53b5cb9bc9c78630b8290 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=2406acfeb347da3d4957627cdb70e2583c03aee7
commit 2406acfeb347da3d4957627cdb70e2583c03aee7
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>
fix urldb numerical v6 address handling
diff --git a/content/urldb.c b/content/urldb.c
index f386aa9..d702e58 100644
--- a/content/urldb.c
+++ b/content/urldb.c
@@ -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;
diff --git a/test/urldbtest.c b/test/urldbtest.c
index ab43163..793b04a 100644
--- a/test/urldbtest.c
+++ b/test/urldbtest.c
@@ -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
-----------------------------------------------------------------------
Summary of changes:
content/urldb.c | 16 ++++++++++++----
test/urldbtest.c | 15 +++++++++++++--
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/content/urldb.c b/content/urldb.c
index f386aa9..d702e58 100644
--- a/content/urldb.c
+++ b/content/urldb.c
@@ -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;
diff --git a/test/urldbtest.c b/test/urldbtest.c
index ab43163..793b04a 100644
--- a/test/urldbtest.c
+++ b/test/urldbtest.c
@@ -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
--
NetSurf Browser
_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org