From e07e7bbd094bb8e671f061161932a749dd194c2a Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 18 Jul 2025 10:23:11 -0400 Subject: [PATCH] Fix potential exception in procedural operator `:matches-attr` Related issue: https://github.com/uBlockOrigin/uBlock-issues/issues/3720 --- platform/mv3/extension/js/scripting/css-procedural-api.js | 1 + src/js/contentscript-extra.js | 1 + 2 files changed, 2 insertions(+) diff --git a/platform/mv3/extension/js/scripting/css-procedural-api.js b/platform/mv3/extension/js/scripting/css-procedural-api.js index 4b516271f..1446cdf7c 100644 --- a/platform/mv3/extension/js/scripting/css-procedural-api.js +++ b/platform/mv3/extension/js/scripting/css-procedural-api.js @@ -119,6 +119,7 @@ class PSelectorMatchesAttrTask extends PSelectorTask { this.reValue = regexFromString(task[1].value, true); } transpose(node, output) { + if ( typeof node.getAttributeNames !== 'function' ) { return; } const attrs = node.getAttributeNames(); for ( const attr of attrs ) { if ( this.reAttr.test(attr) === false ) { continue; } diff --git a/src/js/contentscript-extra.js b/src/js/contentscript-extra.js index 9a60dabf7..cb056c30f 100644 --- a/src/js/contentscript-extra.js +++ b/src/js/contentscript-extra.js @@ -99,6 +99,7 @@ class PSelectorMatchesAttrTask extends PSelectorTask { this.reValue = regexFromString(task[1].value, true); } transpose(node, output) { + if ( typeof node.getAttributeNames !== 'function' ) { return; } const attrs = node.getAttributeNames(); for ( const attr of attrs ) { if ( this.reAttr.test(attr) === false ) { continue; }