From d4f15ca6357bdd744e6078e411153157d0aa430e Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Sat, 19 Oct 2024 10:26:31 -0400 Subject: [PATCH] [mv3] Fix regression in extended filtering with some lists Related issue: https://github.com/uBlockOrigin/uBOL-home/issues/236 Regression from: https://github.com/gorhill/uBlock/commit/58bfe4c846 Cosmetic- and scriptlet injection-based filters broke with filter lists using AdGuard's `[$domain=/.../]` syntax. Potentially affected filter lists: - AdGuard Chinese - AdGuard Turkish --- src/js/static-dnr-filtering.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/js/static-dnr-filtering.js b/src/js/static-dnr-filtering.js index ca66b861d..2e87695bf 100644 --- a/src/js/static-dnr-filtering.js +++ b/src/js/static-dnr-filtering.js @@ -19,12 +19,6 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; - -/******************************************************************************/ - -import staticNetFilteringEngine from './static-net-filtering.js'; -import { LineIterator } from './text-utils.js'; import * as sfp from './static-filtering-parser.js'; import { @@ -32,6 +26,9 @@ import { CompiledListWriter, } from './static-filtering-io.js'; +import { LineIterator } from './text-utils.js'; +import staticNetFilteringEngine from './static-net-filtering.js'; + /******************************************************************************/ // http://www.cse.yorku.ca/~oz/hash.html#djb2 @@ -47,13 +44,15 @@ const hashFromStr = (type, s) => { return hash & 0xFFFFFF; }; +const isRegex = hn => hn.startsWith('/') && hn.endsWith('/'); + /******************************************************************************/ // Copied from cosmetic-filter.js for the time being to avoid unwanted // dependencies const rePlainSelector = /^[#.][\w\\-]+/; -const rePlainSelectorEx = /^[^#.\[(]+([#.][\w-]+)|([#.][\w-]+)$/; +const rePlainSelectorEx = /^[^#.[(]+([#.][\w-]+)|([#.][\w-]+)$/; const rePlainSelectorEscaped = /^[#.](?:\\[0-9A-Fa-f]+ |\\.|\w|-)+/; const reEscapeSequence = /\\([0-9A-Fa-f]+ |.)/g; @@ -106,6 +105,7 @@ function addExtendedToDNR(context, parser) { for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) { if ( bad ) { continue; } if ( exception ) { continue; } + if ( isRegex(hn) ) { continue; } let details = context.scriptletFilters.get(argsToken); if ( details === undefined ) { context.scriptletFilters.set(argsToken, details = { args }); @@ -163,6 +163,7 @@ function addExtendedToDNR(context, parser) { }; for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) { if ( bad ) { continue; } + if ( isRegex(hn) ) { continue; } if ( not ) { if ( rule.condition.excludedInitiatorDomains === undefined ) { rule.condition.excludedInitiatorDomains = []; @@ -235,6 +236,7 @@ function addExtendedToDNR(context, parser) { } for ( const { hn, not, bad } of parser.getExtFilterDomainIterator() ) { if ( bad ) { continue; } + if ( isRegex(hn) ) { continue; } let { compiled, exception, raw } = parser.result; if ( exception ) { continue; } let rejected;