1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-07-08 04:49:12 +02:00

Further fix new setTimeout-if/setInterval-if scriptlets

Addtionally, a dedicated test page has been added:

https://gorhill.github.io/uBlock/tests/scriptlet-injection-filters-1.html
This commit is contained in:
Raymond Hill 2019-08-25 09:03:24 -04:00
parent a7c852ca5d
commit e0fd9750d4
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
3 changed files with 221 additions and 18 deletions

View File

@ -537,7 +537,7 @@
if ( delayNot ) { delay = delay.slice(1); }
delay = parseInt(delay, 10);
if ( needle === '' || needle === '{{1}}' ) {
needle = '.?';
needle = '';
} else if ( needle.startsWith('/') && needle.endsWith('/') ) {
needle = needle.slice(1,-1);
} else {
@ -547,20 +547,24 @@
delayNot === false && isNaN(delay)
? console.log
: undefined;
needle = new RegExp(needle);
const reNeedle = new RegExp(needle);
window.setInterval = new Proxy(window.setInterval, {
apply: function(target, thisArg, args) {
const a = String(args[0]);
const b = args[1];
let defuse = false;
if ( log !== undefined ) {
log('uBO: setInterval("%s", %s)', a, b);
} else if (
(
isNaN(delay) && (delayNot || needleNot) ||
isNaN(delay) === false && (b === delay) === delayNot
) &&
(needle.test(a) === needleNot)
) {
} else if ( needle === '' && needleNot || isNaN(delay) && delayNot ) {
defuse = true;
} else if ( isNaN(delay) ) {
defuse = reNeedle.test(a) === needleNot;
} else if ( needle === '' ) {
defuse = (b === delay) === delayNot;
} else if ( reNeedle.test(a) === needleNot || (b === delay) === delayNot ) {
defuse = true;
}
if ( defuse ) {
args[0] = function(){};
}
return target.apply(thisArg, args);
@ -606,7 +610,7 @@
if ( delayNot ) { delay = delay.slice(1); }
delay = parseInt(delay, 10);
if ( needle === '' || needle === '{{1}}' ) {
needle = '.?';
needle = '';
} else if ( needle.startsWith('/') && needle.endsWith('/') ) {
needle = needle.slice(1,-1);
} else {
@ -616,20 +620,24 @@
delayNot === false && isNaN(delay)
? console.log
: undefined;
needle = new RegExp(needle);