]> spindle.queued.net Git - midori/commitdiff
Tweak is_ip_address and add IPv6 test cases
authorChristian Dywan <christian@twotoasts.de>
Wed, 29 Feb 2012 22:17:02 +0000 (23:17 +0100)
committerChristian Dywan <christian@twotoasts.de>
Wed, 29 Feb 2012 22:17:02 +0000 (23:17 +0100)
Stop wrongly mistaking foo::bar for IPv6.

katze/midori-uri.vala
midori/sokoke.c
tests/magic-uri.c

index 6a3c4c82f4382cb6cb603f83b81be9b3b1edb697..4dad32c196e850378fa88a4df298c749c39d8238 100644 (file)
@@ -125,8 +125,17 @@ namespace Midori {
                FIXME: Schemes are not handled
                hostname_is_ip_address () is not used because
                we'd have to separate the path from the URI first. */
-            return uri != null && uri[0].isdigit ()
-             && (uri.chr (4, '.') != null || uri.chr (4, ':') != null);
+            if (uri == null)
+                return false;
+            /* IPv4 */
+            if (uri[0].isdigit () && (uri.chr (4, '.') != null))
+                return true;
+            /* IPv6 */
+            if (uri[0].isalnum () && uri[1].isalnum ()
+             && uri[2].isalnum () && uri[3].isalnum () && uri[4] == ':'
+             && (uri[5] == ':' || uri[5].isalnum ()))
+                return true;
+            return false;
         }
         public static bool is_valid (string? uri) {
             return uri != null
index 8cd7df7dc5315a860e88972cae5e5f054b4e519c..4b34c944d140fe6bb97d13ea04bac875a6191a71 100644 (file)
@@ -684,7 +684,7 @@ sokoke_magic_uri (const gchar* uri)
     search = NULL;
     if (!strchr (uri, ' ') &&
         ((search = strchr (uri, ':')) || (search = strchr (uri, '@'))) &&
-        search[0] && !g_ascii_isalpha (search[1]))
+        search[0] && g_ascii_isdigit (search[1]))
         return g_strconcat ("http://", uri, NULL);
     if ((!strcmp (uri, "localhost") || strchr (uri, '/'))
       && sokoke_resolve_hostname (uri))
index 46dbddac5199efa9b43bf8feaf29a2cf0c198d0b..f06a8b32c6ca7405e25d373a048818981315ceb4 100644 (file)
@@ -13,6 +13,7 @@
 #include <midori/midori.h>
 
 #define SM "http://www.searchmash.com/search/"
+#define HTTP_PREFIX "midori-unit-test-expected-http-prefix"
 
 static void
 test_input (const gchar* input,
@@ -20,6 +21,7 @@ test_input (const gchar* input,
 {
     static KatzeArray* search_engines = NULL;
     gchar* uri;
+    gchar* real_expected = NULL;
 
     if (G_UNLIKELY (!search_engines))
     {
@@ -58,7 +60,12 @@ test_input (const gchar* input,
 
         uri = search_uri ? midori_uri_for_search (search_uri, keywords) : NULL;
     }
-    katze_assert_str_equal (input, uri, expected);
+
+    if (!g_strcmp0 (expected, HTTP_PREFIX))
+        real_expected = g_strconcat ("http://", input, NULL);
+
+    katze_assert_str_equal (input, uri, real_expected ? real_expected : expected);
+    g_free (real_expected);
     g_free (uri);
 }
 
@@ -93,6 +100,13 @@ magic_uri_uri (void)
     /* test_input ("foo:f1o2o3@bar.baz", "http://f1o2o3:foo@bar.baz"); */
     /* test_input ("foo:foo@bar.baz", "http://foo:foo@bar.baz"); */
 
+    test_input ("2001:0db8:85a3:0000:0000:8a2e:0370:7334", HTTP_PREFIX);
+    test_input ("fe80:0:0:0:202:b3ff:fe1e:8329", HTTP_PREFIX);
+    test_input ("fe80::202:b3ff:fe1e:8329", HTTP_PREFIX);
+    test_input ("fe80::76e5:bff:fe04:38e0/64", HTTP_PREFIX);
+    test_input ("content::browser", NULL);
+    test_input ("std::copy", NULL);
+
     uri = "http://bugs.launchpad.net/midori";
     g_assert_cmpstr ("bugs.launchpad.net", ==, midori_uri_parse_hostname (uri, NULL));
     uri = "https://bugs.launchpad.net/midori";