aboutsummaryrefslogtreecommitdiffstats
path: root/fuzz
diff options
context:
space:
mode:
Diffstat (limited to 'fuzz')
-rw-r--r--fuzz/fuzz_parse.rs87
1 files changed, 87 insertions, 0 deletions
diff --git a/fuzz/fuzz_parse.rs b/fuzz/fuzz_parse.rs
new file mode 100644
index 0000000..0efdf42
--- /dev/null
+++ b/fuzz/fuzz_parse.rs
@@ -0,0 +1,87 @@
+//! Fuzz targets for message parsers.
+//!
+//! Run with: cargo +nightly fuzz run fuzz_parse
+//!
+//! Requires: cargo install cargo-fuzz
+//!
+//! These targets verify that no input can cause a panic,
+//! buffer overflow, or undefined behavior in the parsers.
+
+// Note: this file is a reference for cargo-fuzz targets.
+// To use, create a fuzz/Cargo.toml and fuzz_targets/
+// directory per cargo-fuzz conventions. The actual fuzz
+// harnesses are:
+
+#[cfg(test)]
+mod tests {
+ /// Fuzz MsgHeader::parse with random bytes.
+ #[test]
+ fn fuzz_header_parse() {
+ for _ in 0..10_000 {
+ let mut buf = [0u8; 128];
+ tesseras_dht::sys::random_bytes(&mut buf);
+ // Should never panic
+ let _ = tesseras_dht::wire::MsgHeader::parse(&buf);
+ }
+ }
+
+ /// Fuzz msg::parse_store with random bytes.
+ #[test]
+ fn fuzz_store_parse() {
+ for _ in 0..10_000 {
+ let mut buf = [0u8; 256];
+ tesseras_dht::sys::random_bytes(&mut buf);
+ let _ = tesseras_dht::msg::parse_store(&buf);
+ }
+ }
+
+ /// Fuzz msg::parse_find_node with random bytes.
+ #[test]
+ fn fuzz_find_node_parse() {
+ for _ in 0..10_000 {
+ let mut buf = [0u8; 128];
+ tesseras_dht::sys::random_bytes(&mut buf);
+ let _ = tesseras_dht::msg::parse_find_node(&buf);
+ }
+ }
+
+ /// Fuzz msg::parse_find_value with random bytes.
+ #[test]
+ fn fuzz_find_value_parse() {
+ for _ in 0..10_000 {
+ let mut buf = [0u8; 256];
+ tesseras_dht::sys::random_bytes(&mut buf);
+ let _ = tesseras_dht::msg::parse_find_value(&buf);
+ }
+ }
+
+ /// Fuzz rdp::parse_rdp_wire with random bytes.
+ #[test]
+ fn fuzz_rdp_parse() {
+ for _ in 0..10_000 {
+ let mut buf = [0u8; 128];
+ tesseras_dht::sys::random_bytes(&mut buf);
+ let _ = tesseras_dht::rdp::parse_rdp_wire(&buf);
+ }
+ }
+
+ /// Fuzz dgram::parse_fragment with random bytes.
+ #[test]
+ fn fuzz_fragment_parse() {
+ for _ in 0..10_000 {
+ let mut buf = [0u8; 64];
+ tesseras_dht::sys::random_bytes(&mut buf);
+ let _ = tesseras_dht::dgram::parse_fragment(&buf);
+ }
+ }
+
+ /// Fuzz msg::parse_find_value_reply with random bytes.
+ #[test]
+ fn fuzz_find_value_reply_parse() {
+ for _ in 0..10_000 {
+ let mut buf = [0u8; 256];
+ tesseras_dht::sys::random_bytes(&mut buf);
+ let _ = tesseras_dht::msg::parse_find_value_reply(&buf);
+ }
+ }
+}