From e5c1b63315537e48b47d9c08ce28df07411baaec Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 13 Oct 2023 21:51:13 -0400 Subject: [PATCH] Fix overzealous matching in `(remove|replace)-node-text` scriptlets Related issue: https://github.com/uBlockOrigin/uBlock-issues/issues/2868 --- assets/resources/scriptlets.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 76d8c6276..8114a59b5 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -100,11 +100,15 @@ function safeSelf() { if ( details.matchAll ) { return true; } return this.RegExp_test.call(details.re, haystack) === details.expect; }, - patternToRegex(pattern, flags = undefined) { + patternToRegex(pattern, flags = undefined, verbatim = false) { if ( pattern === '' ) { return /^/; } const match = /^\/(.+)\/([gimsu]*)$/.exec(pattern); if ( match === null ) { - return new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), flags); + const reStr = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + if ( verbatim ) { + return new RegExp(`^${reStr}$`, flags); + } + return new RegExp(reStr, flags); } try { return new RegExp(match[1], match[2] || flags); @@ -552,7 +556,7 @@ function replaceNodeTextCore( replacement = '' ) { const safe = safeSelf(); - const reNodeName = safe.patternToRegex(nodeName, 'i'); + const reNodeName = safe.patternToRegex(nodeName, 'i', true); const rePattern = safe.patternToRegex(pattern, 'gms'); const extraArgs = safe.getExtraArgs(Array.from(arguments), 3); const shouldLog = scriptletGlobals.has('canDebug') && extraArgs.log || 0;