From f1b19d5115c327f78c443546b629abedb845e228 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Thu, 8 Dec 2022 10:07:58 -0500 Subject: [PATCH] Fix reverse lookup of generic cosmetic filters Related feedback: - https://github.com/gorhill/uBlock/commit/26594fb902b1042843ebda1ab3b3aa6304ed3ae9#commitcomment-92413254 --- src/js/cosmetic-filtering.js | 9 ++------- src/js/reverselookup-worker.js | 23 ++--------------------- 2 files changed, 4 insertions(+), 28 deletions(-) diff --git a/src/js/cosmetic-filtering.js b/src/js/cosmetic-filtering.js index 27724d9a7..d5b97d78e 100644 --- a/src/js/cosmetic-filtering.js +++ b/src/js/cosmetic-filtering.js @@ -737,22 +737,17 @@ FilterContainer.prototype.retrieveGenericSelectors = function(request) { const selectorsSet = new Set(); const hashes = []; + const safeOnly = request.safeOnly === true; for ( const hash of request.hashes ) { const bucket = this.lowlyGeneric.get(hash); if ( bucket === undefined ) { continue; } for ( const selector of bucket.split(',\n') ) { + if ( safeOnly && selector === keyFromSelector(selector) ) { continue; } selectorsSet.add(selector); } hashes.push(hash); } - if ( request.safeOnly ) { - for ( const selector of selectorsSet ) { - if ( selector !== keyFromSelector(selector) ) { continue; } - selectorsSet.delete(selector); - } - } - // Apply exceptions: it is the responsibility of the caller to provide // the exceptions to be applied. const excepted = []; diff --git a/src/js/reverselookup-worker.js b/src/js/reverselookup-worker.js index 0a5386ad5..bc59931ce 100644 --- a/src/js/reverselookup-worker.js +++ b/src/js/reverselookup-worker.js @@ -183,33 +183,14 @@ const fromExtendedFilter = function(details) { const filterType = fargs[0]; // https://github.com/gorhill/uBlock/issues/2763 - if ( - filterType >= 0 && - filterType <= 5 && - details.ignoreGeneric - ) { - continue; - } + if ( filterType === 0 && details.ignoreGeneric ) { continue; } // Do not confuse cosmetic filters with HTML ones. if ( (filterType === 64) !== isHtmlFilter ) { continue; } switch ( filterType ) { // Lowly generic cosmetic filters - case 0: // simple id-based - if ( exception ) { break; } - if ( fargs[1] !== selector.slice(1) ) { break; } - if ( selector.charAt(0) !== '#' ) { break; } - found = prefix + selector; - break; - case 2: // simple class-based - if ( exception ) { break; } - if ( fargs[1] !== selector.slice(1) ) { break; } - if ( selector.charAt(0) !== '.' ) { break; } - found = prefix + selector; - break; - case 1: // complex id-based - case 3: // complex class-based + case 0: if ( exception ) { break; } if ( fargs[2] !== selector ) { break; } found = prefix + selector;