]> spindle.queued.net Git - midori/commitdiff
Escape adblock filters properly and adjust the tests
authorAlexander Butenko <a.butenka@gmail.com>
Wed, 22 Jul 2009 19:42:33 +0000 (21:42 +0200)
committerChristian Dywan <christian@twotoasts.de>
Wed, 22 Jul 2009 19:42:33 +0000 (21:42 +0200)
AUTHORS
extensions/adblock.c
extensions/wscript_build

diff --git a/AUTHORS b/AUTHORS
index bc77c4db4d8acbd405c2f713248fcf62542c0c99..6d1db6f22ecf5113ca5f849cac1d36f44e148318 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -17,6 +17,7 @@ Contributors:
     Johannes Reinhardt <jreinhardt@ist-dein-freund.de>
     Jean-François Guchens <zcx000@gmail.com>
     Jérôme Geulfucci <jeromeg@xfce.org>
+    Alexander Butenko <a.butenka@gmail.com>
 
 Graphics:
     extension: Nancy Runge <nancy@twotoasts.de>
index 8debf5e1b123c79b4ae81794f8b80e9df0243052..a9e438f02abe7f29d6853adf650372611ea67f0a 100644 (file)
@@ -1,5 +1,6 @@
 /*
  Copyright (C) 2009 Christian Dywan <christian@twotoasts.de>
+ Copyright (C) 2009 Alexander Butenko <a.butenka@gmail.com>
 
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
     #include <unistd.h>
 #endif
 
+static gchar *
+adblock_fixup_regexp (gchar* src)
+{
+    gchar* dst;
+    gchar* s;
+    /* FIXME: Avoid always allocating twice the string */
+    s = dst = g_malloc (strlen (src) * 2);
+
+    while (*src)
+    {
+        switch (*src)
+        {
+        case '*':
+            *s++ = '.';
+            break;
+        case '.':
+            *s++ = '\\';
+            break;
+        case '?':
+            *s++ = '\\';
+            break;
+        case '|':
+            *s++ = '\\';
+            break;
+        }
+        *s++ = *src;
+        src++;
+    }
+    *s = 0;
+    return dst;
+}
+
 static void
 adblock_app_add_browser_cb (MidoriApp*       app,
                             MidoriBrowser*   browser,
@@ -322,12 +355,7 @@ adblock_parse_line (gchar* line)
     if (line[0] == '[')
         return NULL;
     g_strchomp (line);
-    /* TODO: Replace trailing '*' with '.*' */
-    if (line[0] == '*')
-        return g_strconcat (".", line, NULL);
-    else if (line[0] == '?')
-        return g_strconcat ("\\", line, NULL);
-    return g_strdup (line);
+    return adblock_fixup_regexp (line);
 }
 
 static GHashTable*
@@ -469,11 +497,11 @@ test_adblock_parse (void)
 
     g_assert_cmpstr (adblock_parse_line ("*foo"), ==, ".*foo");
     g_assert_cmpstr (adblock_parse_line ("?foo"), ==, "\\?foo");
-    /* g_assert_cmpstr (adblock_parse_line ("foo*"), ==, "foo.*");
-    g_assert_cmpstr (adblock_parse_line ("foo?"), ==, "foo\\?"); */
+    g_assert_cmpstr (adblock_parse_line ("foo*"), ==, "foo.*");
+    g_assert_cmpstr (adblock_parse_line ("foo?"), ==, "foo\\?");
 
-    g_assert_cmpstr (adblock_parse_line (".*foo/bar"), ==, ".*foo/bar");
-    g_assert_cmpstr (adblock_parse_line ("http://bla.blub/.*"), ==, "http://bla.blub/.*");
+    g_assert_cmpstr (adblock_parse_line (".*foo/bar"), ==, "\\..*foo/bar");
+    g_assert_cmpstr (adblock_parse_line ("http://bla.blub/*"), ==, "http://bla\\.blub/.*");
 }
 
 static void
@@ -486,10 +514,10 @@ test_adblock_pattern (void)
     temp = g_file_open_tmp ("midori_adblock_match_test_XXXXXX", &filename, NULL);
 
     g_file_set_contents (filename,
-        "*ads.foo.bar.*\n"
-        ".*ads.bogus.name.*\n"
-        "http://ads.bla.blub/.*\n"
-        "http://ads.blub.boing/*.",
+        "*ads.foo.bar*\n"
+        "*ads.bogus.name*\n"
+        "http://ads.bla.blub/*\n"
+        "http://ads.blub.boing/*",
         -1, NULL);
     pattern = adblock_parse_file (filename);
 
index 751162adf4e8096c2db798ecf2b067ba71426f81..8f84a1735bdceca45073c58ac5b8c286196ee3a6 100644 (file)
@@ -6,9 +6,6 @@ import os
 
 extensions = os.listdir ('extensions')
 for extension in extensions:
-    # Adblock is incomplete and not ready for release
-    if extension == 'adblock.c':
-        continue
     folder = 'extensions' + os.sep + extension
     if os.path.isdir (folder):
         files = os.listdir (folder)