Escape adblock filters properly and adjust the tests
This commit is contained in:
parent
7192fa38f9
commit
121d348c64
3 changed files with 43 additions and 17 deletions
1
AUTHORS
1
AUTHORS
|
@ -17,6 +17,7 @@ Contributors:
|
||||||
Johannes Reinhardt <jreinhardt@ist-dein-freund.de>
|
Johannes Reinhardt <jreinhardt@ist-dein-freund.de>
|
||||||
Jean-François Guchens <zcx000@gmail.com>
|
Jean-François Guchens <zcx000@gmail.com>
|
||||||
Jérôme Geulfucci <jeromeg@xfce.org>
|
Jérôme Geulfucci <jeromeg@xfce.org>
|
||||||
|
Alexander Butenko <a.butenka@gmail.com>
|
||||||
|
|
||||||
Graphics:
|
Graphics:
|
||||||
extension: Nancy Runge <nancy@twotoasts.de>
|
extension: Nancy Runge <nancy@twotoasts.de>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2009 Christian Dywan <christian@twotoasts.de>
|
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
|
This library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -19,6 +20,38 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#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
|
static void
|
||||||
adblock_app_add_browser_cb (MidoriApp* app,
|
adblock_app_add_browser_cb (MidoriApp* app,
|
||||||
MidoriBrowser* browser,
|
MidoriBrowser* browser,
|
||||||
|
@ -322,12 +355,7 @@ adblock_parse_line (gchar* line)
|
||||||
if (line[0] == '[')
|
if (line[0] == '[')
|
||||||
return NULL;
|
return NULL;
|
||||||
g_strchomp (line);
|
g_strchomp (line);
|
||||||
/* TODO: Replace trailing '*' with '.*' */
|
return adblock_fixup_regexp (line);
|
||||||
if (line[0] == '*')
|
|
||||||
return g_strconcat (".", line, NULL);
|
|
||||||
else if (line[0] == '?')
|
|
||||||
return g_strconcat ("\\", line, NULL);
|
|
||||||
return g_strdup (line);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GHashTable*
|
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?"), ==, "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 (".*foo/bar"), ==, "\\..*foo/bar");
|
||||||
g_assert_cmpstr (adblock_parse_line ("http://bla.blub/.*"), ==, "http://bla.blub/.*");
|
g_assert_cmpstr (adblock_parse_line ("http://bla.blub/*"), ==, "http://bla\\.blub/.*");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -486,10 +514,10 @@ test_adblock_pattern (void)
|
||||||
temp = g_file_open_tmp ("midori_adblock_match_test_XXXXXX", &filename, NULL);
|
temp = g_file_open_tmp ("midori_adblock_match_test_XXXXXX", &filename, NULL);
|
||||||
|
|
||||||
g_file_set_contents (filename,
|
g_file_set_contents (filename,
|
||||||
"*ads.foo.bar.*\n"
|
"*ads.foo.bar*\n"
|
||||||
".*ads.bogus.name.*\n"
|
"*ads.bogus.name*\n"
|
||||||
"http://ads.bla.blub/.*\n"
|
"http://ads.bla.blub/*\n"
|
||||||
"http://ads.blub.boing/*.",
|
"http://ads.blub.boing/*",
|
||||||
-1, NULL);
|
-1, NULL);
|
||||||
pattern = adblock_parse_file (filename);
|
pattern = adblock_parse_file (filename);
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,6 @@ import os
|
||||||
|
|
||||||
extensions = os.listdir ('extensions')
|
extensions = os.listdir ('extensions')
|
||||||
for extension in extensions:
|
for extension in extensions:
|
||||||
# Adblock is incomplete and not ready for release
|
|
||||||
if extension == 'adblock.c':
|
|
||||||
continue
|
|
||||||
folder = 'extensions' + os.sep + extension
|
folder = 'extensions' + os.sep + extension
|
||||||
if os.path.isdir (folder):
|
if os.path.isdir (folder):
|
||||||
files = os.listdir (folder)
|
files = os.listdir (folder)
|
||||||
|
|
Loading…
Reference in a new issue