OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 test.done(); | 303 test.done(); |
304 }; | 304 }; |
305 | 305 |
306 exports.testSpecialCharacters = function(test) | 306 exports.testSpecialCharacters = function(test) |
307 { | 307 { |
308 compareFilter(test, "/ddd|f?a[s]d/", ["type=filterlist", "text=/ddd|f?a[s]d/",
"regexp=ddd|f?a[s]d"]); | 308 compareFilter(test, "/ddd|f?a[s]d/", ["type=filterlist", "text=/ddd|f?a[s]d/",
"regexp=ddd|f?a[s]d"]); |
309 compareFilter(test, "*asdf*d**dd*", ["type=filterlist", "text=*asdf*d**dd*", "
regexp=asdf.*d.*dd"]); | 309 compareFilter(test, "*asdf*d**dd*", ["type=filterlist", "text=*asdf*d**dd*", "
regexp=asdf.*d.*dd"]); |
310 compareFilter(test, "|*asd|f*d**dd*|", ["type=filterlist", "text=|*asd|f*d**dd
*|", "regexp=^.*asd\\|f.*d.*dd.*$"]); | 310 compareFilter(test, "|*asd|f*d**dd*|", ["type=filterlist", "text=|*asd|f*d**dd
*|", "regexp=^.*asd\\|f.*d.*dd.*$"]); |
311 compareFilter(test, "dd[]{}$%<>&()*d", ["type=filterlist", "text=dd[]{}$%<>&()
*d", "regexp=dd\\[\\]\\{\\}\\$\\%\\<\\>\\&\\(\\).*d"]); | 311 compareFilter(test, "dd[]{}$%<>&()*d", ["type=filterlist", "text=dd[]{}$%<>&()
*d", "regexp=dd\\[\\]\\{\\}\\$\\%\\<\\>\\&\\(\\).*d"]); |
312 | 312 |
313 // Leading and trailing wildcards should be left in for rewrite filters (#6868
). | |
314 compareFilter(test, "*asdf*d**dd*$rewrite=", ["type=filterlist", "text=*asdf*d
**dd*$rewrite=", "regexp=.*asdf.*d.*dd.*", "rewrite=", "contentType=" + (default
Types & ~(t.SCRIPT | t.SUBDOCUMENT | t.OBJECT | t.OBJECT_SUBREQUEST))]); | |
315 | |
316 compareFilter(test, "@@/ddd|f?a[s]d/", ["type=whitelist", "text=@@/ddd|f?a[s]d
/", "regexp=ddd|f?a[s]d", "contentType=" + defaultTypes]); | 313 compareFilter(test, "@@/ddd|f?a[s]d/", ["type=whitelist", "text=@@/ddd|f?a[s]d
/", "regexp=ddd|f?a[s]d", "contentType=" + defaultTypes]); |
317 compareFilter(test, "@@*asdf*d**dd*", ["type=whitelist", "text=@@*asdf*d**dd*"
, "regexp=asdf.*d.*dd", "contentType=" + defaultTypes]); | 314 compareFilter(test, "@@*asdf*d**dd*", ["type=whitelist", "text=@@*asdf*d**dd*"
, "regexp=asdf.*d.*dd", "contentType=" + defaultTypes]); |
318 compareFilter(test, "@@|*asd|f*d**dd*|", ["type=whitelist", "text=@@|*asd|f*d*
*dd*|", "regexp=^.*asd\\|f.*d.*dd.*$", "contentType=" + defaultTypes]); | 315 compareFilter(test, "@@|*asd|f*d**dd*|", ["type=whitelist", "text=@@|*asd|f*d*
*dd*|", "regexp=^.*asd\\|f.*d.*dd.*$", "contentType=" + defaultTypes]); |
319 compareFilter(test, "@@dd[]{}$%<>&()*d", ["type=whitelist", "text=@@dd[]{}$%<>
&()*d", "regexp=dd\\[\\]\\{\\}\\$\\%\\<\\>\\&\\(\\).*d", "contentType=" + defaul
tTypes]); | 316 compareFilter(test, "@@dd[]{}$%<>&()*d", ["type=whitelist", "text=@@dd[]{}$%<>
&()*d", "regexp=dd\\[\\]\\{\\}\\$\\%\\<\\>\\&\\(\\).*d", "contentType=" + defaul
tTypes]); |
320 | 317 |
321 test.done(); | 318 test.done(); |
322 }; | 319 }; |
323 | 320 |
324 exports.testFilterOptions = function(test) | 321 exports.testFilterOptions = function(test) |
325 { | 322 { |
326 compareFilter(test, "bla$match-case,csp=first csp,script,other,third-party,dom
ain=FOO.cOm,sitekey=foo", ["type=filterlist", "text=bla$match-case,csp=first csp
,script,other,third-party,domain=FOO.cOm,sitekey=foo", "matchCase=true", "conten
tType=" + (t.SCRIPT | t.OTHER | t.CSP), "thirdParty=true", "domains=foo.com", "s
itekeys=FOO", "csp=first csp"]); | 323 compareFilter(test, "bla$match-case,csp=first csp,script,other,third-party,dom
ain=FOO.cOm,sitekey=foo", ["type=filterlist", "text=bla$match-case,csp=first csp
,script,other,third-party,domain=FOO.cOm,sitekey=foo", "matchCase=true", "conten
tType=" + (t.SCRIPT | t.OTHER | t.CSP), "thirdParty=true", "domains=foo.com", "s
itekeys=FOO", "csp=first csp"]); |
327 compareFilter(test, "bla$~match-case,~csp=csp,~script,~other,~third-party,doma
in=~bAr.coM", ["type=filterlist", "text=bla$~match-case,~csp=csp,~script,~other,
~third-party,domain=~bAr.coM", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.O
THER)), "thirdParty=false", "domains=~bar.com"]); | 324 compareFilter(test, "bla$~match-case,~csp=csp,~script,~other,~third-party,doma
in=~bAr.coM", ["type=filterlist", "text=bla$~match-case,~csp=csp,~script,~other,
~third-party,domain=~bAr.coM", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.O
THER)), "thirdParty=false", "domains=~bar.com"]); |
328 compareFilter(test, "@@bla$match-case,script,other,third-party,domain=foo.com|
bar.com|~bAR.foO.Com|~Foo.Bar.com,csp=c s p,sitekey=foo|bar", ["type=whitelist",
"text=@@bla$match-case,script,other,third-party,domain=foo.com|bar.com|~bAR.foO
.Com|~Foo.Bar.com,csp=c s p,sitekey=foo|bar", "matchCase=true", "contentType=" +
(t.SCRIPT | t.OTHER | t.CSP), "thirdParty=true", "domains=bar.com|foo.com|~bar.
foo.com|~foo.bar.com", "sitekeys=BAR|FOO"]); | 325 compareFilter(test, "@@bla$match-case,script,other,third-party,domain=foo.com|
bar.com|~bAR.foO.Com|~Foo.Bar.com,csp=c s p,sitekey=foo|bar", ["type=whitelist",
"text=@@bla$match-case,script,other,third-party,domain=foo.com|bar.com|~bAR.foO
.Com|~Foo.Bar.com,csp=c s p,sitekey=foo|bar", "matchCase=true", "contentType=" +
(t.SCRIPT | t.OTHER | t.CSP), "thirdParty=true", "domains=bar.com|foo.com|~bar.
foo.com|~foo.bar.com", "sitekeys=BAR|FOO"]); |
329 compareFilter(test, "@@bla$match-case,script,other,third-party,domain=foo.com|
bar.com|~bar.foo.com|~foo.bar.com,sitekey=foo|bar", ["type=whitelist", "text=@@b
la$match-case,script,other,third-party,domain=foo.com|bar.com|~bar.foo.com|~foo.
bar.com,sitekey=foo|bar", "matchCase=true", "contentType=" + (t.SCRIPT | t.OTHER
), "thirdParty=true", "domains=bar.com|foo.com|~bar.foo.com|~foo.bar.com", "site
keys=BAR|FOO"]); | 326 compareFilter(test, "@@bla$match-case,script,other,third-party,domain=foo.com|
bar.com|~bar.foo.com|~foo.bar.com,sitekey=foo|bar", ["type=whitelist", "text=@@b
la$match-case,script,other,third-party,domain=foo.com|bar.com|~bar.foo.com|~foo.
bar.com,sitekey=foo|bar", "matchCase=true", "contentType=" + (t.SCRIPT | t.OTHER
), "thirdParty=true", "domains=bar.com|foo.com|~bar.foo.com|~foo.bar.com", "site
keys=BAR|FOO"]); |
330 compareFilter(test, "||content.server.com/files/*.php$rewrite=$1", ["type=filt
erlist", "text=||content.server.com/files/*.php$rewrite=$1", "regexp=^[\\w\\-]+:
\\/+(?!\\/)(?:[^\\/]+\\.)?content\\.server\\.com\\/files\\/.*\\.php", "matchCase
=false", "rewrite=$1", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.SUBDOCUME
NT | t.OBJECT | t.OBJECT_SUBREQUEST))]); | |
331 | 327 |
332 compareFilter(test, "||example.com/ad.js$rewrite=abp-resource:noopjs,domain=fo
o.com|bar.com", ["type=filterlist", "text=||example.com/ad.js$rewrite=abp-resour
ce:noopjs,domain=foo.com|bar.com", "regexp=null", "matchCase=false", "rewrite=ab
p-resource:noopjs", "contentType=" + (defaultTypes), "domains=bar.com|foo.com"])
; | 328 compareFilter(test, "||example.com/ad.js$rewrite=abp-resource:noopjs,domain=fo
o.com|bar.com", ["type=filterlist", "text=||example.com/ad.js$rewrite=abp-resour
ce:noopjs,domain=foo.com|bar.com", "regexp=null", "matchCase=false", "rewrite=no
opjs", "contentType=" + (defaultTypes), "domains=bar.com|foo.com"]); |
333 compareFilter(test, "*example.com/ad.js$rewrite=abp-resource:noopjs,domain=foo
.com|bar.com", ["type=filterlist", "text=*example.com/ad.js$rewrite=abp-resource
:noopjs,domain=foo.com|bar.com", "regexp=null", "matchCase=false", "rewrite=abp-
resource:noopjs", "contentType=" + (defaultTypes), "domains=bar.com|foo.com"]); | 329 compareFilter(test, "*example.com/ad.js$rewrite=abp-resource:noopjs,domain=foo
.com|bar.com", ["type=filterlist", "text=*example.com/ad.js$rewrite=abp-resource
:noopjs,domain=foo.com|bar.com", "regexp=null", "matchCase=false", "rewrite=noop
js", "contentType=" + (defaultTypes), "domains=bar.com|foo.com"]); |
334 compareFilter(test, "||example.com/ad.js$rewrite=abp-resource:noopjs,~third-pa
rty", ["type=filterlist", "text=||example.com/ad.js$rewrite=abp-resource:noopjs,
~third-party", "regexp=null", "matchCase=false", "rewrite=abp-resource:noopjs",
"thirdParty=false", "contentType=" + (defaultTypes)]); | 330 compareFilter(test, "||example.com/ad.js$rewrite=abp-resource:noopjs,~third-pa
rty", ["type=filterlist", "text=||example.com/ad.js$rewrite=abp-resource:noopjs,
~third-party", "regexp=null", "matchCase=false", "rewrite=noopjs", "thirdParty=f
alse", "contentType=" + (defaultTypes)]); |
| 331 compareFilter(test, "||content.server.com/files/*.php$rewrite=$1", ["type=inva
lid", "reason=filter_invalid_rewrite", "text=||content.server.com/files/*.php$re
write=$1"]); |
| 332 compareFilter(test, "||content.server.com/files/*.php$rewrite=", ["type=invali
d", "reason=filter_invalid_rewrite", "text=||content.server.com/files/*.php$rewr
ite="]); |
335 | 333 |
336 // background and image should be the same for backwards compatibility | 334 // background and image should be the same for backwards compatibility |
337 compareFilter(test, "bla$image", ["type=filterlist", "text=bla$image", "conten
tType=" + (t.IMAGE)]); | 335 compareFilter(test, "bla$image", ["type=filterlist", "text=bla$image", "conten
tType=" + (t.IMAGE)]); |
338 compareFilter(test, "bla$background", ["type=filterlist", "text=bla$background
", "contentType=" + (t.IMAGE)]); | 336 compareFilter(test, "bla$background", ["type=filterlist", "text=bla$background
", "contentType=" + (t.IMAGE)]); |
339 compareFilter(test, "bla$~image", ["type=filterlist", "text=bla$~image", "cont
entType=" + (defaultTypes & ~t.IMAGE)]); | 337 compareFilter(test, "bla$~image", ["type=filterlist", "text=bla$~image", "cont
entType=" + (defaultTypes & ~t.IMAGE)]); |
340 compareFilter(test, "bla$~background", ["type=filterlist", "text=bla$~backgrou
nd", "contentType=" + (defaultTypes & ~t.IMAGE)]); | 338 compareFilter(test, "bla$~background", ["type=filterlist", "text=bla$~backgrou
nd", "contentType=" + (defaultTypes & ~t.IMAGE)]); |
341 | 339 |
342 compareFilter(test, "@@bla$~script,~other", ["type=whitelist", "text=@@bla$~sc
ript,~other", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.OTHER))]); | 340 compareFilter(test, "@@bla$~script,~other", ["type=whitelist", "text=@@bla$~sc
ript,~other", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.OTHER))]); |
343 compareFilter(test, "@@http://bla$~script,~other", ["type=whitelist", "text=@@
http://bla$~script,~other", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.OTHE
R))]); | 341 compareFilter(test, "@@http://bla$~script,~other", ["type=whitelist", "text=@@
http://bla$~script,~other", "contentType=" + (defaultTypes & ~(t.SCRIPT | t.OTHE
R))]); |
344 compareFilter(test, "@@|ftp://bla$~script,~other", ["type=whitelist", "text=@@
|ftp://bla$~script,~other", "regexp=^ftp\\:\\/\\/bla", "contentType=" + (default
Types & ~(t.SCRIPT | t.OTHER))]); | 342 compareFilter(test, "@@|ftp://bla$~script,~other", ["type=whitelist", "text=@@
|ftp://bla$~script,~other", "regexp=^ftp\\:\\/\\/bla", "contentType=" + (default
Types & ~(t.SCRIPT | t.OTHER))]); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 test.equal(Filter.normalize("/foo$/$ csp = script-src http://example.com/?$1=
1&$2=2&$3=3"), | 555 test.equal(Filter.normalize("/foo$/$ csp = script-src http://example.com/?$1=
1&$2=2&$3=3"), |
558 "/foo$/$csp=script-src http://example.com/?$1=1&$2=2&$3=3"); | 556 "/foo$/$csp=script-src http://example.com/?$1=1&$2=2&$3=3"); |
559 test.equal(Filter.normalize("||content.server.com/files/*.php$rewrite= $1"), | 557 test.equal(Filter.normalize("||content.server.com/files/*.php$rewrite= $1"), |
560 "||content.server.com/files/*.php$rewrite=$1"); | 558 "||content.server.com/files/*.php$rewrite=$1"); |
561 test.done(); | 559 test.done(); |
562 }; | 560 }; |
563 | 561 |
564 exports.testFilterRewriteOption = function(test) | 562 exports.testFilterRewriteOption = function(test) |
565 { | 563 { |
566 let text = "/(content\\.server\\/file\\/.*\\.txt)\\?.*$/$rewrite=$1"; | 564 let text = "/(content\\.server\\/file\\/.*\\.txt)\\?.*$/$rewrite=$1"; |
| 565 let filter = Filter.fromText(text); |
| 566 test.ok(filter instanceof InvalidFilter); |
| 567 test.equal(filter.type, "invalid"); |
| 568 test.equal(filter.reason, "filter_invalid_rewrite"); |
567 | 569 |
568 let filter = Filter.fromText(text); | 570 text = "||/(content\\.server\\/file\\/.*\\.txt)\\?.*$/$rewrite=blank-text,doma
ins=content.server"; |
| 571 filter = Filter.fromText(text); |
| 572 test.ok(filter instanceof InvalidFilter); |
| 573 test.equal(filter.type, "invalid"); |
| 574 test.equal(filter.reason, "filter_invalid_rewrite"); |
569 | 575 |
570 test.equal(filter.rewrite, "$1"); | 576 text = "||/(content\\.server\\/file\\/.*\\.txt)\\?.*$/$rewrite=abp-resource:bl
ank-text,domain=content.server"; |
571 // no rewrite occured: didn't match. | 577 filter = Filter.fromText(text); |
572 test.equal(filter.rewriteUrl("foo"), "foo"); | 578 test.equal(filter.rewriteUrl("http://content.server/file/foo.txt"), |
573 // rewrite occured: matched. | 579 "data:text/plain,"); |
574 test.equal(filter.rewriteUrl("http://content.server/file/foo.txt?bar"), | 580 test.equal(filter.rewriteUrl("http://content.server/file/foo.txt?bar"), |
575 "http://content.server/file/foo.txt"); | 581 "data:text/plain,"); |
576 | |
577 // checking for same origin. | |
578 let rewriteDiffOrigin = | |
579 "/content\\.server(\\/file\\/.*\\.txt)\\?.*$/$rewrite=foo.com$1"; | |
580 let filterDiffOrigin = Filter.fromText(rewriteDiffOrigin); | |
581 | |
582 // no rewrite occured because of a different origin. | |
583 test.equal( | |
584 filterDiffOrigin.rewriteUrl("http://content.server/file/foo.txt?bar"), | |
585 "http://content.server/file/foo.txt?bar" | |
586 ); | |
587 | |
588 // relative path. | |
589 let rewriteRelative = "/(\\/file\\/.*\\.txt)\\?.*$/$rewrite=$1/disable"; | |
590 let filterRelative = Filter.fromText(rewriteRelative); | |
591 | |
592 test.equal( | |
593 filterRelative.rewriteUrl("http://content.server/file/foo.txt?bar"), | |
594 "http://content.server/file/foo.txt/disable" | |
595 ); | |
596 test.equal( | |
597 filterRelative.rewriteUrl("http://example.com/file/foo.txt?bar"), | |
598 "http://example.com/file/foo.txt/disable" | |
599 ); | |
600 | |
601 // Example from https://github.com/uBlockOrigin/uBlock-issues/issues/46#issuec
omment-391190533 | |
602 // The rewrite shouldn't happen. | |
603 let rewriteEvil = "/(^https?:\\/\\/[^/])/$script,rewrite=$1.evil.com"; | |
604 let filterEvil = Filter.fromText(rewriteEvil); | |
605 | |
606 test.equal( | |
607 filterEvil.rewriteUrl("https://www.adblockplus.org/script.js"), | |
608 "https://www.adblockplus.org/script.js" | |
609 ); | |
610 | |
611 // Strip. | |
612 let rewriteStrip = "tag$rewrite="; | |
613 let filterStrip = Filter.fromText(rewriteStrip); | |
614 | |
615 test.equal(filterStrip.rewrite, ""); | |
616 test.equal( | |
617 filterStrip.rewriteUrl("http://example.com/?tag"), | |
618 "http://example.com/?" | |
619 ); | |
620 | 582 |
621 test.done(); | 583 test.done(); |
622 }; | 584 }; |
623 | 585 |
624 exports.testDomainMapDeduplication = function(test) | 586 exports.testDomainMapDeduplication = function(test) |
625 { | 587 { |
626 let filter1 = Filter.fromText("foo$domain=blocking.example.com"); | 588 let filter1 = Filter.fromText("foo$domain=blocking.example.com"); |
627 let filter2 = Filter.fromText("bar$domain=blocking.example.com"); | 589 let filter2 = Filter.fromText("bar$domain=blocking.example.com"); |
628 let filter3 = Filter.fromText("elemhide.example.com##.foo"); | 590 let filter3 = Filter.fromText("elemhide.example.com##.foo"); |
629 let filter4 = Filter.fromText("elemhide.example.com##.bar"); | 591 let filter4 = Filter.fromText("elemhide.example.com##.bar"); |
630 | 592 |
631 // This compares the references to make sure that both refer to the same | 593 // This compares the references to make sure that both refer to the same |
632 // object (#6815). | 594 // object (#6815). |
633 | 595 |
634 test.equal(filter1.domains, filter2.domains); | 596 test.equal(filter1.domains, filter2.domains); |
635 test.equal(filter3.domains, filter4.domains); | 597 test.equal(filter3.domains, filter4.domains); |
636 | 598 |
637 let filter5 = Filter.fromText("bar$domain=www.example.com"); | 599 let filter5 = Filter.fromText("bar$domain=www.example.com"); |
638 let filter6 = Filter.fromText("www.example.com##.bar"); | 600 let filter6 = Filter.fromText("www.example.com##.bar"); |
639 | 601 |
640 test.notEqual(filter2.domains, filter5.domains); | 602 test.notEqual(filter2.domains, filter5.domains); |
641 test.notEqual(filter4.domains, filter6.domains); | 603 test.notEqual(filter4.domains, filter6.domains); |
642 | 604 |
643 test.done(); | 605 test.done(); |
644 }; | 606 }; |
OLD | NEW |