From bc92640457535e8ccd0e46b74250cc6199675823 Mon Sep 17 00:00:00 2001 From: Michael Mileusnich <467735+mikemiles-dev@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:26:54 -0600 Subject: [PATCH] feat: added fuzz (#96) * feat: fuzzing, bug: fixed v9 field counting --------- Co-authored-by: Michael Mileusnich Co-authored-by: mikemiles-dev --- RELEASES.md | 2 ++ fuzz/.gitignore | 4 ++++ fuzz/Cargo.toml | 21 +++++++++++++++++++++ fuzz/README.md | 3 +++ fuzz/fuzz_targets/fuzz_target_1.rs | 8 ++++++++ src/variable_versions/v9.rs | 4 +++- 6 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 fuzz/.gitignore create mode 100644 fuzz/Cargo.toml create mode 100644 fuzz/README.md create mode 100644 fuzz/fuzz_targets/fuzz_target_1.rs diff --git a/RELEASES.md b/RELEASES.md index ff04c33..a9ed19d 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,5 +1,7 @@ # 0.5.0 * Typos in documentation fixed. +* Added cargo-fuzz for fuzzing. + * Uncovered area in V9 that could cause panic. # 0.4.9 * Added FlowStartMilliseconds, FlowEndMilliseconds diff --git a/fuzz/.gitignore b/fuzz/.gitignore new file mode 100644 index 0000000..1a45eee --- /dev/null +++ b/fuzz/.gitignore @@ -0,0 +1,4 @@ +target +corpus +artifacts +coverage diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml new file mode 100644 index 0000000..bf4e3c2 --- /dev/null +++ b/fuzz/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "netflow_parser-fuzz" +version = "0.0.0" +publish = false +edition = "2021" + +[package.metadata] +cargo-fuzz = true + +[dependencies] +libfuzzer-sys = "0.4" + +[dependencies.netflow_parser] +path = ".." + +[[bin]] +name = "fuzz_target_1" +path = "fuzz_targets/fuzz_target_1.rs" +test = false +doc = false +bench = false diff --git a/fuzz/README.md b/fuzz/README.md new file mode 100644 index 0000000..b2fc76d --- /dev/null +++ b/fuzz/README.md @@ -0,0 +1,3 @@ +```rustup default nightly``` + +```cargo fuzz run fuzz_target_1``` diff --git a/fuzz/fuzz_targets/fuzz_target_1.rs b/fuzz/fuzz_targets/fuzz_target_1.rs new file mode 100644 index 0000000..667a20f --- /dev/null +++ b/fuzz/fuzz_targets/fuzz_target_1.rs @@ -0,0 +1,8 @@ +#![no_main] + +use libfuzzer_sys::fuzz_target; +use netflow_parser::NetflowParser; + +fuzz_target!(|data: &[u8]| { + NetflowParser::default().parse_bytes(data); +}); diff --git a/src/variable_versions/v9.rs b/src/variable_versions/v9.rs index 497b61a..6215e0a 100644 --- a/src/variable_versions/v9.rs +++ b/src/variable_versions/v9.rs @@ -285,7 +285,9 @@ pub struct OptionDataField { impl Template { fn get_total_size(&self) -> u16 { - self.fields.iter().fold(0, |acc, i| acc + i.field_length) + self.fields + .iter() + .fold(0, |acc, i| acc.saturating_add(i.field_length)) } }