Skip to content

Commit 59dc66e

Browse files
mikemiles-devMichael Mileusnich
and
Michael Mileusnich
authored
v9 loop (#34)
Co-authored-by: Michael Mileusnich <[email protected]>
1 parent 9f400b4 commit 59dc66e

File tree

4 files changed

+56
-1
lines changed

4 files changed

+56
-1
lines changed

RELEASES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# 0.2.1
2-
* Fixed issue where no ipfix template fields can infinite loop.
2+
* Fixed issue where v9/ipfix template fields can infinite loop.
33

44
# 0.2.0
55
* Clippy updates for 1.76

src/lib.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,22 @@ mod tests {
423423
assert_yaml_snapshot!(parser.parse_bytes(&packet));
424424
}
425425

426+
#[test]
427+
fn it_parses_v9_with_no_template_fields_raises_error() {
428+
let packet = [
429+
0, 9, 0, 26, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, 0, 10, 0, 8, 0, 0, 1, 1,
430+
];
431+
let template = V9Template {
432+
length: 10,
433+
field_count: 2,
434+
template_id: 258,
435+
fields: vec![],
436+
};
437+
let mut parser = NetflowParser::default();
438+
parser.v9_parser.templates.insert(258, template);
439+
assert_yaml_snapshot!(parser.parse_bytes(&packet));
440+
}
441+
426442
#[test]
427443
fn it_parses_ipfix_options_template() {
428444
let packet = [
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
source: src/lib.rs
3+
expression: parser.parse_bytes(&packet)
4+
---
5+
- Error:
6+
error_message: Could not parse v9_packet
7+
bytes:
8+
- 0
9+
- 9
10+
- 0
11+
- 26
12+
- 0
13+
- 0
14+
- 0
15+
- 1
16+
- 0
17+
- 0
18+
- 0
19+
- 1
20+
- 0
21+
- 0
22+
- 0
23+
- 0
24+
- 1
25+
- 2
26+
- 0
27+
- 10
28+
- 0
29+
- 8
30+
- 0
31+
- 0
32+
- 1
33+
- 1
34+

src/variable_versions/v9.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,11 @@ fn parse_fields(
353353
}
354354
};
355355
let mut fields = vec![];
356+
// If no fields there are no fields to parse
357+
if template.fields.is_empty() {
358+
// dbg!("Template without fields!");
359+
return Err(NomErr::Error(NomError::new(i, ErrorKind::Fail)));
360+
};
356361
let mut remaining = i;
357362
while !remaining.is_empty() {
358363
let mut data_field = BTreeMap::new();

0 commit comments

Comments
 (0)