]> spindle.queued.net Git - midori/commitdiff
Replace leading * or ? in adblock lines with .* or \? respectively
authorChristian Dywan <christian@twotoasts.de>
Thu, 16 Jul 2009 12:36:35 +0000 (14:36 +0200)
committerChristian Dywan <christian@twotoasts.de>
Thu, 16 Jul 2009 12:36:35 +0000 (14:36 +0200)
extensions/adblock.c

index 2161f1add95af0beb599ab8884a115911a6ceec0..f4e8f44358c8eeee0e4b584264fd44e91e92c390 100644 (file)
@@ -266,6 +266,8 @@ adblock_session_add_filter (SoupSession* session,
 
         while (fgets (line, 255, file))
         {
+            gchar* temp;
+
             error = NULL;
             /* Ignore comments and new lines */
             if (line[0] == '!')
@@ -281,18 +283,26 @@ adblock_session_add_filter (SoupSession* session,
             if (line[0] == '[')
                 continue;
             g_strchomp (line);
-            /* TODO: Replace '*' with '.*', '?' with '\?' */
-            regex = g_regex_new (line, G_REGEX_OPTIMIZE,
+            /* TODO: Replace trailing '*' with '.*' */
+            if (line[0] == '*')
+                temp = g_strconcat (".", line, NULL);
+            else if (line[0] == '?')
+                temp = g_strconcat ("\\", line, NULL);
+            else
+                temp = g_strdup (line);
+
+            regex = g_regex_new (temp, G_REGEX_OPTIMIZE,
                                  G_REGEX_MATCH_NOTEMPTY, &error);
             if (error)
             {
                 g_warning ("%s: %s", G_STRFUNC, error->message);
                 g_error_free (error);
+                g_free (temp);
             }
             else
             {
                 havepattern = TRUE;
-                g_hash_table_insert (pattern, g_strdup (line), regex);
+                g_hash_table_insert (pattern, temp, regex);
             }
         }
         fclose (file);