diff --git a/platform/nodejs/eslintrc.json b/platform/nodejs/eslintrc.json index a0bc995f2..864be8cc5 100644 --- a/platform/nodejs/eslintrc.json +++ b/platform/nodejs/eslintrc.json @@ -19,8 +19,7 @@ "ObjectExpression": "off", "ignoreComments": true, "ignoredNodes": [ - "AssignmentExpression:has(Literal)", - "LogicalExpression" + "AssignmentExpression:has(Literal)" ] } ], diff --git a/src/js/static-filtering-parser.js b/src/js/static-filtering-parser.js index 280f1c4c0..ebe2f995b 100644 --- a/src/js/static-filtering-parser.js +++ b/src/js/static-filtering-parser.js @@ -2437,22 +2437,7 @@ const NetOptionsIterator = class { descriptor = netOptionTokenDescriptors.get(token); } // Validate option according to context - if ( - descriptor === undefined || - ltok !== lopt && - hasNoBits(descriptor, OPTCanNegate) || - this.exception && - hasBits(descriptor, OPTBlockOnly) || - this.exception === false && - hasBits(descriptor, OPTAllowOnly) || - assigned && - hasNoBits(descriptor, OPTMayAssign | OPTMustAssign) || - assigned === false && - hasBits(descriptor, OPTMustAssign) && ( - this.exception === false || - hasNoBits(descriptor, OPTAllowMayAssign) - ) - ) { + if ( !this.optionIsValidInContext(descriptor, ltok !== lopt, assigned) ) { descriptor = OPTTokenInvalid; } // Keep track of which options are present: any given option can @@ -2665,6 +2650,30 @@ const NetOptionsIterator = class { this.readPtr = i + 6; return this; } + + optionIsValidInContext(descriptor, negated, assigned) { + if ( descriptor === undefined ) { + return false; + } + if ( negated && hasNoBits(descriptor, OPTCanNegate) ) { + return false; + } + if ( this.exception && hasBits(descriptor, OPTBlockOnly) ) { + return false; + } + if ( this.exception === false && hasBits(descriptor, OPTAllowOnly) ) { + return false; + } + if ( assigned && hasNoBits(descriptor, OPTMayAssign | OPTMustAssign) ) { + return false; + } + if ( assigned === false && hasBits(descriptor, OPTMustAssign) ) { + if ( this.exception === false || hasNoBits(descriptor, OPTAllowMayAssign) ) { + return false; + } + } + return true; + } }; /******************************************************************************/ diff --git a/src/js/static-net-filtering.js b/src/js/static-net-filtering.js index 01cb65933..419f300bf 100644 --- a/src/js/static-net-filtering.js +++ b/src/js/static-net-filtering.js @@ -3268,14 +3268,13 @@ const FilterParser = class { } isJustOrigin() { - return this.optionUnitBits === this.DOMAIN_BIT && - this.isRegex === false && ( - this.pattern === '*' || ( - this.anchor === 0b010 && - /^(?:http[s*]?:(?:\/\/)?)$/.test(this.pattern) - ) - ) && - this.domainOpt.indexOf('~') === -1; + if ( this.optionUnitBits !== this.DOMAIN_BIT ) { return false; } + if ( this.isRegex ) { return false; } + if ( this.domainOpt.includes('~') ) { return false; } + if ( this.pattern === '*' ) { return true; } + if ( this.anchor !== 0b010 ) { return false; } + if ( /^(?:http[s*]?:(?:\/\/)?)$/.test(this.pattern) ) { return true; } + return false; } domainIsEntity(s) {