Skip to content

Commit bd547ad

Browse files
fix: Remove unwraps from filter_keyvals_regex
Solves a crash found in issue #343
1 parent 55dc47f commit bd547ad

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

aw-transform/src/filter_keyvals.rs

+20-4
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ pub fn filter_keyvals_regex(mut events: Vec<Event>, key: &str, regex: &Regex) ->
4141
let mut filtered_events = Vec::new();
4242

4343
for event in events.drain(..) {
44-
if let Some(v) = event.data.get(key) {
45-
if regex.is_match(v.as_str().unwrap()).unwrap() {
46-
filtered_events.push(event);
47-
}
44+
if let Some(value) = event.data.get(key).and_then(|v| v.as_str()) {
45+
match regex.is_match(value) {
46+
Ok(true) => filtered_events.push(event),
47+
Ok(false) => (),
48+
Err(err) => warn!("Failed to run regex: {}", err),
49+
};
4850
}
4951
}
5052
filtered_events
@@ -132,6 +134,20 @@ mod tests {
132134
assert_eq!(0, res.len());
133135
}
134136

137+
#[test]
138+
fn test_filter_keyvals_regex_non_string_data_value() {
139+
let e1 = Event {
140+
id: None,
141+
timestamp: DateTime::from_str("2000-01-01T00:00:00Z").unwrap(),
142+
duration: Duration::seconds(1),
143+
data: json_map! {"key1": json!(100)},
144+
};
145+
let events = vec![e1.clone()];
146+
let regex_value = RegexBuilder::new("value").build().unwrap();
147+
let res = filter_keyvals_regex(events.clone(), "key1", &regex_value);
148+
assert!(res.is_empty());
149+
}
150+
135151
#[test]
136152
fn test_exclude_keyvals() {
137153
let e1 = Event {

0 commit comments

Comments
 (0)