mirror of
https://github.com/gorhill/uBlock.git
synced 2024-11-16 23:42:39 +01:00
Support matching against list of IP addresses
Related commit:
6acf97bf51
This commit is contained in:
parent
55ab6d6875
commit
4f181b0bc5
@ -314,7 +314,7 @@ vAPI.Net = class extends vAPI.Net {
|
|||||||
const { addresses } = record;
|
const { addresses } = record;
|
||||||
if ( Array.isArray(addresses) === false ) { return; }
|
if ( Array.isArray(addresses) === false ) { return; }
|
||||||
if ( addresses.length === 0 ) { return; }
|
if ( addresses.length === 0 ) { return; }
|
||||||
return addresses[0];
|
return addresses.join('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
suspendOneRequest(details) {
|
suspendOneRequest(details) {
|
||||||
|
@ -174,6 +174,7 @@ export async function benchmarkStaticNetFiltering(options = {}) {
|
|||||||
for ( let i = 0; i < requests.length; i++ ) {
|
for ( let i = 0; i < requests.length; i++ ) {
|
||||||
const request = requests[i];
|
const request = requests[i];
|
||||||
fctxt.setURL(request.url);
|
fctxt.setURL(request.url);
|
||||||
|
fctxt.setIPAddress('93.184.215.14\n2606:2800:21f:cb07:6820:80da:af6b:8b2c');
|
||||||
fctxt.setDocOriginFromURL(request.frameUrl);
|
fctxt.setDocOriginFromURL(request.frameUrl);
|
||||||
fctxt.setType(request.cpt);
|
fctxt.setType(request.cpt);
|
||||||
sfne.redirectURL = undefined;
|
sfne.redirectURL = undefined;
|
||||||
|
@ -2993,16 +2993,14 @@ class FilterIPAddress {
|
|||||||
if ( ipaddr === '' ) { return false; }
|
if ( ipaddr === '' ) { return false; }
|
||||||
const details = filterRefs[filterData[idata+1]];
|
const details = filterRefs[filterData[idata+1]];
|
||||||
switch ( details.$type || this.TYPE_UNKNOWN ) {
|
switch ( details.$type || this.TYPE_UNKNOWN ) {
|
||||||
case this.TYPE_EQUAL:
|
|
||||||
return ipaddr === details.pattern;
|
|
||||||
case this.TYPE_LAN:
|
case this.TYPE_LAN:
|
||||||
return this.isLAN(ipaddr);
|
return this.isLAN(ipaddr);
|
||||||
case this.TYPE_LOOPBACK:
|
case this.TYPE_LOOPBACK:
|
||||||
return this.isLoopback(ipaddr);
|
return this.isLoopback(ipaddr);
|
||||||
|
case this.TYPE_EQUAL:
|
||||||
case this.TYPE_STARTSWITH:
|
case this.TYPE_STARTSWITH:
|
||||||
return ipaddr.startsWith(details.$pattern);
|
|
||||||
case this.TYPE_RE:
|
case this.TYPE_RE:
|
||||||
return details.$pattern.test(ipaddr)
|
return details.$pattern.test(ipaddr);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -3013,12 +3011,13 @@ class FilterIPAddress {
|
|||||||
details.$type = this.TYPE_LOOPBACK;
|
details.$type = this.TYPE_LOOPBACK;
|
||||||
} else if ( pattern.startsWith('/') && pattern.endsWith('/') ) {
|
} else if ( pattern.startsWith('/') && pattern.endsWith('/') ) {
|
||||||
details.$type = this.TYPE_RE;
|
details.$type = this.TYPE_RE;
|
||||||
details.$pattern = new RegExp(pattern.slice(1, -1));
|
details.$pattern = new RegExp(pattern.slice(1, -1), 'm');
|
||||||
} else if ( pattern.endsWith('*') ) {
|
} else if ( pattern.endsWith('*') ) {
|
||||||
details.$type = this.TYPE_STARTSWITH;
|
details.$type = this.TYPE_STARTSWITH;
|
||||||
details.$pattern = pattern.slice(0, -1);
|
details.$pattern = new RegExp(`^${restrFromPlainPattern(pattern.slice(0, -1))}`, 'm');
|
||||||
} else {
|
} else {
|
||||||
details.$type = this.TYPE_EQUAL;
|
details.$type = this.TYPE_EQUAL;
|
||||||
|
details.$pattern = new RegExp(`^${restrFromPlainPattern(pattern)}$`, 'm');
|
||||||
}
|
}
|
||||||
return this.match(idata);
|
return this.match(idata);
|
||||||
}
|
}
|
||||||
@ -3049,14 +3048,12 @@ class FilterIPAddress {
|
|||||||
if ( ipaddr.startsWith('::ffff:') === false ) { return false; }
|
if ( ipaddr.startsWith('::ffff:') === false ) { return false; }
|
||||||
return this.reIPv6IPv4lan.test(ipaddr);
|
return this.reIPv6IPv4lan.test(ipaddr);
|
||||||
}
|
}
|
||||||
if ( ipaddr.includes(':') ) {
|
|
||||||
if ( c0 === 0x36 /* 6 */ ) {
|
if ( c0 === 0x36 /* 6 */ ) {
|
||||||
return ipaddr.startsWith('64:ff9b:');
|
return ipaddr.startsWith('64:ff9b:');
|
||||||
}
|
}
|
||||||
if ( c0 === 0x66 /* f */ ) {
|
if ( c0 === 0x66 /* f */ ) {
|
||||||
return this.reIPv6local.test(ipaddr);
|
return this.reIPv6local.test(ipaddr);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5641,6 +5638,12 @@ StaticNetFilteringEngine.prototype.test = function(details) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const urlskips = this.matchAndFetchModifiers(fctxt, 'urlskip');
|
||||||
|
if ( urlskips ) {
|
||||||
|
for ( const urlskip of urlskips ) {
|
||||||
|
out.push(`modified: ${urlskip.logData().raw}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
return out.join('\n');
|
return out.join('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user