Skip to content

Commit 33c03d9

Browse files
authored
Fix NetworkFilter keys (#555)
1 parent fca4bc5 commit 33c03d9

File tree

5 files changed

+28
-33
lines changed

5 files changed

+28
-33
lines changed

src/cosmetic_filter_cache.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ impl CosmeticFilterCache {
262262
for hash in hashes.iter() {
263263
// Handle top-level hide selectors
264264
if let Some(hide_iterator) = hostname_hide_view.get(**hash) {
265-
for (_, hide_selector) in hide_iterator {
265+
for hide_selector in hide_iterator {
266266
if !exceptions.contains(hide_selector) {
267267
specific_hide_selectors.insert(hide_selector.to_owned());
268268
}
@@ -271,7 +271,7 @@ impl CosmeticFilterCache {
271271

272272
// Handle top-level inject scripts with encoded permissions
273273
if let Some(script_iterator) = hostname_inject_script_view.get(**hash) {
274-
for (_, encoded_script) in script_iterator {
274+
for encoded_script in script_iterator {
275275
let (permission, script) = decode_script_with_permission(encoded_script);
276276
script_injections
277277
.entry(script)

src/filters/fb_network.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,15 @@ impl<'a> FlatNetworkFilter<'a> {
7474
#[inline(always)]
7575
pub fn new(
7676
filter: &'a fb::NetworkFilter<'a>,
77-
index: usize,
7877
filter_data_context: &'a FilterDataContext,
7978
) -> Self {
79+
// Use the flatbuffer relative location as key, it's unique for
80+
// each filter regardless of the filter list it belongs to.
81+
let key = filter._tab.loc() as u64;
82+
8083
Self {
84+
key,
8185
fb_filter: filter,
82-
key: index as u64,
8386
mask: NetworkFilterMask::from_bits_retain(filter.mask()),
8487
filter_data_context,
8588
}

src/flatbuffers/containers/flat_multimap.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ where
7171
V: Follow<'a>,
7272
Keys: SortedIndex<I>,
7373
{
74-
type Item = (usize, <V as Follow<'a>>::Inner);
74+
type Item = <V as Follow<'a>>::Inner;
7575

7676
fn next(&mut self) -> Option<Self::Item> {
7777
if self.index < self.keys.len() && self.keys.get(self.index) == self.key {
7878
self.index += 1;
79-
Some((self.index - 1, self.values.get(self.index - 1)))
79+
Some(self.values.get(self.index - 1))
8080
} else {
8181
None
8282
}

src/network_filter_list.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,8 @@ impl NetworkFilterList<'_> {
9090

9191
for token in request.get_tokens_for_match() {
9292
if let Some(iter) = filter_map.get(to_short_hash(*token)) {
93-
for (index, fb_filter) in iter {
94-
let filter =
95-
FlatNetworkFilter::new(&fb_filter, index, self.filter_data_context);
93+
for fb_filter in iter {
94+
let filter = FlatNetworkFilter::new(&fb_filter, self.filter_data_context);
9695

9796
// if matched, also needs to be tagged with an active tag (or not tagged at all)
9897
if filter.matches(request, regex_manager)
@@ -133,9 +132,8 @@ impl NetworkFilterList<'_> {
133132

134133
for token in request.get_tokens_for_match() {
135134
if let Some(iter) = filter_map.get(to_short_hash(*token)) {
136-
for (index, fb_filter) in iter {
137-
let filter =
138-
FlatNetworkFilter::new(&fb_filter, index, self.filter_data_context);
135+
for fb_filter in iter {
136+
let filter = FlatNetworkFilter::new(&fb_filter, self.filter_data_context);
139137

140138
// if matched, also needs to be tagged with an active tag (or not tagged at all)
141139
if filter.matches(request, regex_manager)

tests/unit/flatbuffers/containers/flat_multimap.rs

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ mod tests {
4646

4747
// Test existing key
4848
let mut iter = map.get(1).unwrap();
49-
assert_eq!(iter.next(), Some((0, 100)));
49+
assert_eq!(iter.next(), Some(100));
5050
assert_eq!(iter.next(), None);
5151

5252
// Test non-existing key
@@ -65,14 +65,14 @@ mod tests {
6565

6666
// Test key with single value
6767
let mut iter = map.get(3).unwrap();
68-
assert_eq!(iter.next(), Some((5, 60)));
68+
assert_eq!(iter.next(), Some(60));
6969
assert_eq!(iter.next(), None);
7070

7171
// Test key with multiple values
7272
let mut iter = map.get(2).unwrap();
73-
assert_eq!(iter.next(), Some((2, 30)));
74-
assert_eq!(iter.next(), Some((3, 40)));
75-
assert_eq!(iter.next(), Some((4, 50)));
73+
assert_eq!(iter.next(), Some(30));
74+
assert_eq!(iter.next(), Some(40));
75+
assert_eq!(iter.next(), Some(50));
7676
assert_eq!(iter.next(), None);
7777

7878
// Test non-existing key
@@ -89,9 +89,9 @@ mod tests {
8989
assert_eq!(map.total_size(), 3);
9090

9191
let mut iter = map.get(5).unwrap();
92-
assert_eq!(iter.next(), Some((0, 100)));
93-
assert_eq!(iter.next(), Some((1, 200)));
94-
assert_eq!(iter.next(), Some((2, 300)));
92+
assert_eq!(iter.next(), Some(100));
93+
assert_eq!(iter.next(), Some(200));
94+
assert_eq!(iter.next(), Some(300));
9595
assert_eq!(iter.next(), None);
9696
}
9797

@@ -104,9 +104,9 @@ mod tests {
104104

105105
assert_eq!(map.total_size(), 3);
106106

107-
assert_eq!(map.get(1).unwrap().next(), Some((0, 10)));
108-
assert_eq!(map.get(3).unwrap().next(), Some((1, 30)));
109-
assert_eq!(map.get(5).unwrap().next(), Some((2, 50)));
107+
assert_eq!(map.get(1).unwrap().next(), Some(10));
108+
assert_eq!(map.get(3).unwrap().next(), Some(30));
109+
assert_eq!(map.get(5).unwrap().next(), Some(50));
110110
assert!(map.get(2).is_none());
111111
assert!(map.get(4).is_none());
112112
}
@@ -149,11 +149,8 @@ mod tests {
149149
);
150150

151151
assert_eq!(map.total_size(), 3);
152-
assert_eq!(map.get(1).unwrap().collect::<Vec<_>>(), vec![(0, 10)]);
153-
assert_eq!(
154-
map.get(2).unwrap().collect::<Vec<_>>(),
155-
vec![(1, 20), (2, 30)]
156-
);
152+
assert_eq!(map.get(1).unwrap().collect::<Vec<_>>(), vec![10]);
153+
assert_eq!(map.get(2).unwrap().collect::<Vec<_>>(), vec![20, 30]);
157154
assert!(map.get(0).is_none());
158155
assert!(map.get(3).is_none());
159156
}
@@ -191,11 +188,8 @@ mod tests {
191188
let map = FlatMultiMapView::new(flat_map.keys(), flat_map.values());
192189

193190
assert_eq!(map.total_size(), 3);
194-
assert_eq!(map.get("a").unwrap().collect::<Vec<_>>(), vec![(0, "10")]);
195-
assert_eq!(
196-
map.get("b").unwrap().collect::<Vec<_>>(),
197-
vec![(1, "20"), (2, "30")]
198-
);
191+
assert_eq!(map.get("a").unwrap().collect::<Vec<_>>(), vec!["10"]);
192+
assert_eq!(map.get("b").unwrap().collect::<Vec<_>>(), vec!["20", "30"]);
199193
assert!(map.get("c").is_none());
200194
assert!(map.get("d").is_none());
201195
}

0 commit comments

Comments
 (0)