@@ -139,36 +139,37 @@ impl CosmeticFilterCache {
139
139
140
140
/// Add a filter, assuming it has already been determined to be a generic rule
141
141
fn add_generic_filter ( & mut self , rule : CosmeticFilter ) {
142
- if rule. selector . starts_with ( '.' ) {
143
- if let Some ( key) = key_from_selector ( & rule. selector ) {
142
+ let selector = rule. plain_css_selector ( ) . expect ( "Procedural cosmetic filters cannot be generic" ) . to_string ( ) ;
143
+ if selector. starts_with ( '.' ) {
144
+ if let Some ( key) = key_from_selector ( & selector) {
144
145
assert ! ( key. starts_with( '.' ) ) ;
145
146
let class = key[ 1 ..] . to_string ( ) ;
146
- if key == rule . selector {
147
+ if key == selector {
147
148
self . simple_class_rules . insert ( class) ;
148
149
} else {
149
150
if let Some ( bucket) = self . complex_class_rules . get_mut ( & class) {
150
- bucket. push ( rule . selector ) ;
151
+ bucket. push ( selector) ;
151
152
} else {
152
- self . complex_class_rules . insert ( class, vec ! [ rule . selector] ) ;
153
+ self . complex_class_rules . insert ( class, vec ! [ selector] ) ;
153
154
}
154
155
}
155
156
}
156
- } else if rule . selector . starts_with ( '#' ) {
157
- if let Some ( key) = key_from_selector ( & rule . selector ) {
157
+ } else if selector. starts_with ( '#' ) {
158
+ if let Some ( key) = key_from_selector ( & selector) {
158
159
assert ! ( key. starts_with( '#' ) ) ;
159
160
let id = key[ 1 ..] . to_string ( ) ;
160
- if key == rule . selector {
161
+ if key == selector {
161
162
self . simple_id_rules . insert ( id) ;
162
163
} else {
163
164
if let Some ( bucket) = self . complex_id_rules . get_mut ( & id) {
164
- bucket. push ( rule . selector ) ;
165
+ bucket. push ( selector) ;
165
166
} else {
166
- self . complex_id_rules . insert ( id, vec ! [ rule . selector] ) ;
167
+ self . complex_id_rules . insert ( id, vec ! [ selector] ) ;
167
168
}
168
169
}
169
170
}
170
171
} else {
171
- self . misc_generic_selectors . insert ( rule . selector ) ;
172
+ self . misc_generic_selectors . insert ( selector) ;
172
173
}
173
174
}
174
175
@@ -456,9 +457,18 @@ impl HostnameRuleDb {
456
457
use crate :: filters:: cosmetic:: CosmeticFilterAction ;
457
458
use SpecificFilterType :: * ;
458
459
460
+ if rule. plain_css_selector ( ) . is_none ( ) {
461
+ return ;
462
+ }
463
+
459
464
let unhide = rule. mask . contains ( CosmeticFilterMask :: UNHIDE ) ;
460
465
let script_inject = rule. mask . contains ( CosmeticFilterMask :: SCRIPT_INJECT ) ;
461
- let selector = rule. selector ;
466
+ let selector = if let Some ( s) = rule. plain_css_selector ( ) {
467
+ s. to_string ( )
468
+ } else {
469
+ // procedural filters - unhandled for now
470
+ return ;
471
+ } ;
462
472
463
473
let kind = match ( unhide, script_inject, rule. action ) {
464
474
( false , false , None ) => Hide ( selector) ,
0 commit comments