Skip to content

Commit 9367a60

Browse files
committed
Convert new setTimeout-if scriptlet to blacklist approach
As per feedback from filter list maintainers, the whitelist approach has been deemed to confusing. The scriptlet has been renamed `no-setTimeout-if` alias `nostif` to reflect the blacklist approach. `setInterval-if` has been Similarly changed to `no-setInterval-if` alias `nosiif`.
1 parent df49616 commit 9367a60

File tree

2 files changed

+23
-27
lines changed

2 files changed

+23
-27
lines changed

assets/resources/scriptlets.js

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -582,8 +582,8 @@
582582
})();
583583

584584

585-
/// setInterval-if.js
586-
/// alias siif.js
585+
/// no-setInterval-if.js
586+
/// alias nosiif.js
587587
(function() {
588588
let needle = '{{1}}';
589589
const needleNot = needle.charAt(0) === '!';
@@ -611,14 +611,12 @@
611611
let defuse = false;
612612
if ( log !== undefined ) {
613613
log('uBO: setInterval("%s", %s)', a, b);
614-
} else if ( needle === '' && needleNot || isNaN(delay) && delayNot ) {
615-
defuse = true;
616614
} else if ( isNaN(delay) ) {
617-
defuse = reNeedle.test(a) === needleNot;
615+
defuse = reNeedle.test(a) !== needleNot;
618616
} else if ( needle === '' ) {
619-
defuse = (b === delay) === delayNot;
620-
} else if ( reNeedle.test(a) === needleNot || (b === delay) === delayNot ) {
621-
defuse = true;
617+
defuse = (b === delay) !== delayNot;
618+
} else {
619+
defuse = reNeedle.test(a) !== needleNot && (b === delay) !== delayNot;
622620
}
623621
if ( defuse ) {
624622
args[0] = function(){};
@@ -655,8 +653,8 @@
655653
})();
656654

657655

658-
/// setTimeout-if.js
659-
/// alias stif.js
656+
/// no-setTimeout-if.js
657+
/// alias nostif.js
660658
(function() {
661659
let needle = '{{1}}';
662660
const needleNot = needle.charAt(0) === '!';
@@ -684,14 +682,12 @@
684682
let defuse = false;
685683
if ( log !== undefined ) {
686684
log('uBO: setTimeout("%s", %s)', a, b);
687-
} else if ( needle === '' && needleNot || isNaN(delay) && delayNot ) {
688-
defuse = true;
689685
} else if ( isNaN(delay) ) {
690-
defuse = reNeedle.test(a) === needleNot;
686+
defuse = reNeedle.test(a) !== needleNot;
691687
} else if ( needle === '' ) {
692-
defuse = (b === delay) === delayNot;
693-
} else if ( reNeedle.test(a) === needleNot || (b === delay) === delayNot ) {
694-
defuse = true;
688+
defuse = (b === delay) !== delayNot;
689+
} else {
690+
defuse = reNeedle.test(a) !== needleNot && (b === delay) !== delayNot;
695691
}
696692
if ( defuse ) {
697693
args[0] = function(){};

docs/tests/scriptlet-injection-filters-1.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -162,21 +162,21 @@ <h3>Results</h3>
162162
const hostname = self.location.hostname;
163163
const fragment = document.createDocumentFragment();
164164
const filters = [
165-
[ [ '!bad' ], 'GGGG' ],
166-
[ [ 'good' ], 'GGGG' ],
167-
[ [ '', '!33' ], 'GRRG' ],
168-
[ [ '', '66' ], 'GRRG' ],
169-
[ [ '!bad', '!33' ], 'GGRG' ],
170-
[ [ 'good', '66' ], 'GGRG' ],
171-
[ [ '!bad', '33' ], 'GGGR' ],
172-
[ [ 'good', '!66' ], 'GGGR' ],
173-
[ [ 'bad', '!33' ], 'GRRR' ],
174-
[ [ '!good', '66' ], 'GRRR' ],
165+
[ [ 'bad' ], 'GGGG' ],
166+
[ [ '!good' ], 'GGGG' ],
167+
[ [ '', '33' ], 'GRRG' ],
168+
[ [ '', '!66' ], 'GRRG' ],
169+
[ [ 'bad', '33' ], 'GRGG' ],
170+
[ [ '!good', '!66' ], 'GRGG' ],
171+
[ [ 'bad', '!33' ], 'RGGG' ],
172+
[ [ '!good', '66' ], 'RGGG' ],
173+
[ [ '!bad', '33' ], 'RRRG' ],
174+
[ [ 'good', '!66' ], 'RRRG' ],
175175
];
176176
for ( const [ args, result ] of filters ) {
177177
const tr = document.createElement('tr');
178178
let td = document.createElement('td');
179-
td.textContent = `${hostname}##+js(stif, ${args.join(', ')})`;
179+
td.textContent = `${hostname}##+js(nostif, ${args.join(', ')})`;
180180
tr.appendChild(td);
181181
td = document.createElement('td');
182182
for ( let i = 0; i < result.length; i++ ) {

0 commit comments

Comments
 (0)