Fix reverse lookup of entity-based cosmetic filters

Related issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/805
This commit is contained in:
Raymond Hill 2019-12-04 10:10:07 -05:00
parent f7cc2ed7b1
commit 082201d24a
No known key found for this signature in database
GPG key ID: 25E1490B761470C2

View file

@ -121,41 +121,31 @@ const fromCosmeticFilter = function(details) {
const exception = prefix.charAt(1) === '@';
const selector = details.rawFilter.slice(prefix.length);
const isHtmlFilter = prefix.endsWith('^');
const hostname = details.hostname;
// The longer the needle, the lower the number of false positives.
const needle = selector.match(/\w+/g).reduce(function(a, b) {
return a.length > b.length ? a : b;
});
const reHostname = new RegExp(
'^' +
details.hostname.split('.').reduce(
function(acc, item) {
return acc === ''
? item
: '(' + acc + '\\.)?' + item;
},
''
) +
'$'
);
let reEntity,
domain = details.domain,
pos = domain.indexOf('.');
if ( pos !== -1 ) {
reEntity = new RegExp(
const regexFromLabels = (hn, suffix) =>
new RegExp(
'^' +
domain.slice(0, pos).split('.').reduce(
function(acc, item) {
return acc === ''
? item
: '(' + acc + '\\.)?' + item;
},
''
) +
'\\.\\*$'
hn.split('.').reduce((acc, item) => `(${acc}\\.)?${item}`) +
suffix
);
const reHostname = regexFromLabels(hostname, '$');
let reEntity;
{
const domain = details.domain;
const pos = domain.indexOf('.');
if ( pos !== -1 ) {
reEntity = regexFromLabels(
hostname.slice(0, pos + hostname.length - domain.length),
'\\.\\*$'
);
}
}
const hostnameMatches = hn => {