diff --git a/src/js/codemirror/ubo-static-filtering.js b/src/js/codemirror/ubo-static-filtering.js index ac1b048a8..9dfcfb9fb 100644 --- a/src/js/codemirror/ubo-static-filtering.js +++ b/src/js/codemirror/ubo-static-filtering.js @@ -192,6 +192,7 @@ CodeMirror.defineMode('ubo-static-filtering', function() { case sfp.NODE_TYPE_NET_OPTION_NAME_SCRIPT: case sfp.NODE_TYPE_NET_OPTION_NAME_SHIDE: case sfp.NODE_TYPE_NET_OPTION_NAME_TO: + case sfp.NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM: case sfp.NODE_TYPE_NET_OPTION_NAME_XHR: case sfp.NODE_TYPE_NET_OPTION_NAME_WEBRTC: case sfp.NODE_TYPE_NET_OPTION_NAME_WEBSOCKET: diff --git a/src/js/static-filtering-parser.js b/src/js/static-filtering-parser.js index 6110c4f7d..67f82ce69 100644 --- a/src/js/static-filtering-parser.js +++ b/src/js/static-filtering-parser.js @@ -1501,7 +1501,7 @@ export class AstFilterParser { } break; } - case NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM: + case NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM: { realBad = abstractTypeCount || behaviorTypeCount || unredirectableTypeCount; if ( realBad ) { break; } if ( isException !== true && this.options.trustedSource !== true ) { @@ -1510,11 +1510,12 @@ export class AstFilterParser { break; } const value = this.getNetOptionValue(NODE_TYPE_NET_OPTION_NAME_URLTRANSFORM); - if ( parseReplaceValue(value) === undefined ) { + if ( value !== '' && parseReplaceValue(value) === undefined ) { this.astError = AST_ERROR_OPTION_BADVALUE; realBad = true; } break; + } case NODE_TYPE_NET_OPTION_NAME_REMOVEPARAM: realBad = abstractTypeCount || behaviorTypeCount; break;