//! 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); } } }