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

Reply via email to