From a24129a9544cac9678a0b01c06ea6765fd370eb0 Mon Sep 17 00:00:00 2001 From: Jacob Sikorski Date: Mon, 18 Sep 2023 07:15:33 -0600 Subject: [PATCH] Fix #8066: Remove invalid selectors (#8068) --- .../Scripts/Sandboxed/SelectorsPollerScript.js | 14 +++++++++++++- .../User Scripts/ScriptExecutionTests.swift | 5 ++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Sources/Brave/Frontend/UserContent/UserScripts/Scripts_Dynamic/Scripts/Sandboxed/SelectorsPollerScript.js b/Sources/Brave/Frontend/UserContent/UserScripts/Scripts_Dynamic/Scripts/Sandboxed/SelectorsPollerScript.js index 683ef705e03..e4eed3d44f5 100644 --- a/Sources/Brave/Frontend/UserContent/UserScripts/Scripts_Dynamic/Scripts/Sandboxed/SelectorsPollerScript.js +++ b/Sources/Brave/Frontend/UserContent/UserScripts/Scripts_Dynamic/Scripts/Sandboxed/SelectorsPollerScript.js @@ -789,7 +789,19 @@ window.__firefox__.execute(function($) { } return Array.from(CC.hiddenSelectors).filter((selector) => { - return element.matches(selector) + try { + return element.matches(selector) + } catch (error) { + // Remove the culprit from everywhere so it doesn't cause errors + CC.hiddenSelectors.delete(selector) + CC.unhiddenSelectors.add(selector) + + for (let queueIndex = 0; queueIndex < CC.runQueues.length; queueIndex += 1) { + CC.runQueues[queueIndex] + CC.runQueues[queueIndex].delete(selector) + } + return false + } }) } diff --git a/Tests/ClientTests/User Scripts/ScriptExecutionTests.swift b/Tests/ClientTests/User Scripts/ScriptExecutionTests.swift index 5718c88f1a6..3db09208016 100644 --- a/Tests/ClientTests/User Scripts/ScriptExecutionTests.swift +++ b/Tests/ClientTests/User Scripts/ScriptExecutionTests.swift @@ -205,6 +205,9 @@ final class ScriptExecutionTests: XCTestCase { @MainActor func testCosmeticFilteringScript() async throws { // Given let viewController = MockScriptsViewController() + let invalidSelectors = Set([ + "div.invalid-selector:has(span.update-components-actor__description:-abp-contains(/Anzeige|Sponsored|Promoted|Dipromosikan|Propagováno|Promoveret|Gesponsert|Promocionado|促銷內容|Post sponsorisé|프로모션|Post sponsorizzato|广告|プロモーション|Treść promowana|Patrocinado|Promovat|Продвигается|Marknadsfört|Nai-promote|ได้รับการโปรโมท|Öne çıkarılan içerik|Gepromoot|الترويج/))" + ]) let initialStandardSelectors = Set([".test-ads-primary-standard div"]) let initialAggressiveSelectors = Set([".test-ads-primary-aggressive div"]) let polledAggressiveIds = ["test-ad-aggressive"] @@ -220,7 +223,7 @@ final class ScriptExecutionTests: XCTestCase { switchToSelectorsPollingThreshold: 1000, fetchNewClassIdRulesThrottlingMs: 100, aggressiveSelectors: initialAggressiveSelectors, - standardSelectors: initialStandardSelectors, + standardSelectors: initialStandardSelectors.union(invalidSelectors), styleSelectors: [] )