mirror of
https://github.com/gorhill/uBlock.git
synced 2026-03-11 09:04:36 +00:00
investigate to= issue
This commit is contained in:
parent
d92b6f315f
commit
43d08d7737
2 changed files with 55 additions and 4 deletions
|
|
@ -19,6 +19,44 @@
|
|||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
const restrSeparator = '(?:[^%.0-9a-z_-]|$)';
|
||||
const rePlainChars = /[.+?${}()|[\]\\]/g;
|
||||
const reSeparators = /\^/g;
|
||||
const reDanglingAsterisks = /^\*+|\*+$/g;
|
||||
const reAsterisks = /\*+/g;
|
||||
const restrHostnameAnchor1 = '^[a-z-]+://(?:[^/?#]+\\.)?';
|
||||
const restrHostnameAnchor2 = '^[a-z-]+://(?:[^/?#]+)?';
|
||||
|
||||
function regexFilterFromUrlFilter(urlFilter) {
|
||||
let regexFilter = urlFilter;
|
||||
if ( urlFilter.startsWith('||') ) {
|
||||
regexFilter = regexFilter.slice(2);
|
||||
} else if ( urlFilter.startsWith('|') ) {
|
||||
regexFilter = regexFilter.slice(1);
|
||||
}
|
||||
if ( urlFilter.endsWith('|') ) {
|
||||
regexFilter = regexFilter.slice(0, -1);
|
||||
}
|
||||
regexFilter = regexFilter.replace(rePlainChars, '\\$&')
|
||||
.replace(reSeparators, restrSeparator)
|
||||
.replace(reDanglingAsterisks, '')
|
||||
.replace(reAsterisks, '.*?');
|
||||
if ( urlFilter.startsWith('||') ) {
|
||||
regexFilter = (
|
||||
regexFilter.startsWith('\\.') ?
|
||||
restrHostnameAnchor2 :
|
||||
restrHostnameAnchor1
|
||||
) + regexFilter;
|
||||
} else if ( urlFilter.startsWith('|') ) {
|
||||
regexFilter = `^${regexFilter}`;
|
||||
}
|
||||
if ( urlFilter.endsWith('|') ) {
|
||||
regexFilter = `${regexFilter}$`;
|
||||
}
|
||||
console.info(`converting "${urlFilter}" to "${regexFilter}"`);
|
||||
return regexFilter;
|
||||
}
|
||||
|
||||
// https://github.com/uBlockOrigin/uBOL-home/issues/539
|
||||
function patchRuleForIssue539(rule) {
|
||||
const { condition } = rule;
|
||||
|
|
@ -39,6 +77,18 @@ function patchRuleForIssue539(rule) {
|
|||
}
|
||||
}
|
||||
|
||||
// https://github.com/WebKit/WebKit/blob/6cef2858442a4012b783876efd7dd8c0c5669cf9/Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionDeclarativeNetRequestRule.mm#L1134
|
||||
function patchRuleWithTo(rule) {
|
||||
const { condition } = rule;
|
||||
if ( Array.isArray(condition.requestDomains) === false ) { return; }
|
||||
const { urlFilter } = condition;
|
||||
if ( urlFilter === undefined ) { return; }
|
||||
if ( urlFilter.includes('*') === false ) { return; }
|
||||
if ( urlFilter.includes('/') === false ) { return; }
|
||||
condition.regexFilter = regexFilterFromUrlFilter(urlFilter);
|
||||
condition.urlFilter = undefined;
|
||||
}
|
||||
|
||||
function patchRule(rule, out) {
|
||||
const copy = structuredClone(rule);
|
||||
const condition = copy.condition;
|
||||
|
|
@ -62,6 +112,7 @@ function patchRule(rule, out) {
|
|||
delete condition.excludedInitiatorDomains;
|
||||
}
|
||||
patchRuleForIssue539(copy);
|
||||
patchRuleWithTo(copy);
|
||||
// https://github.com/uBlockOrigin/uBOL-home/issues/434
|
||||
let { urlFilter } = condition;
|
||||
if ( urlFilter?.endsWith('^') ) {
|
||||
|
|
|
|||
|
|
@ -314,7 +314,7 @@ const $httpHeaders = {
|
|||
|
||||
// Local helpers
|
||||
|
||||
const restrSeparator = '(?:[^%.0-9a-z_-]|$)';
|
||||
const restrSeparator = '([^%.0-9a-z_-]|$)';
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
|
||||
const reEscape = /[.*+?^${}()|[\]\\]/g;
|
||||
|
|
@ -326,7 +326,7 @@ const restrFromGenericPattern = function(s, anchor = 0) {
|
|||
let reStr = s.replace(restrFromGenericPattern.rePlainChars, '\\$&')
|
||||
.replace(restrFromGenericPattern.reSeparators, restrSeparator)
|
||||
.replace(restrFromGenericPattern.reDanglingAsterisks, '')
|
||||
.replace(restrFromGenericPattern.reAsterisks, '\\S*?');
|
||||
.replace(restrFromGenericPattern.reAsterisks, ' .*?');
|
||||
if ( anchor & 0b100 ) {
|
||||
reStr = (
|
||||
reStr.startsWith('\\.') ?
|
||||
|
|
@ -345,8 +345,8 @@ restrFromGenericPattern.rePlainChars = /[.+?${}()|[\]\\]/g;
|
|||
restrFromGenericPattern.reSeparators = /\^/g;
|
||||
restrFromGenericPattern.reDanglingAsterisks = /^\*+|\*+$/g;
|
||||
restrFromGenericPattern.reAsterisks = /\*+/g;
|
||||
restrFromGenericPattern.restrHostnameAnchor1 = '^[a-z-]+://(?:[^/?#]+\\.)?';
|
||||
restrFromGenericPattern.restrHostnameAnchor2 = '^[a-z-]+://(?:[^/?#]+)?';
|
||||
restrFromGenericPattern.restrHostnameAnchor1 = '^[a-z-]+://([^/?#]+\\.)?';
|
||||
restrFromGenericPattern.restrHostnameAnchor2 = '^[a-z-]+://([^/?#]+)?';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue