test: proptest property testing + cargo-fuzz fuzzing for donglora-cobs
This commit is contained in:
8 files changed
+567
-9
No files matched your search
@@ -0,0 +1,30 @@
|
||||
//! Fuzz target: encode then decode arbitrary input. Output must match input.
|
||||
#![no_main]
|
||||
use libfuzzer_sys::fuzz_target;
|
||||
|
||||
fuzz_target!(|data: &[u8]| {
|
||||
if data.len() > 1024 {
|
||||
return; // skip huge inputs to keep fuzzing fast
|
||||
}
|
||||
|
||||
let max_enc = donglora_cobs::max_encoded_len(data.len()) + 1;
|
||||
let mut enc_buf = vec![0u8; max_enc];
|
||||
|
||||
let enc_len = match donglora_cobs::encode(data, &mut enc_buf) {
|
||||
Some(n) => n,
|
||||
None => return, // encode failed (buffer too small shouldn't happen, but skip)
|
||||
};
|
||||
let encoded = &enc_buf[..enc_len];
|
||||
|
||||
// Encoded output must never contain 0x00.
|
||||
assert!(!encoded.contains(&0x00), "encoded contains sentinel");
|
||||
|
||||
let mut dec_buf = vec![0u8; data.len() + 1];
|
||||
let dec_len = donglora_cobs::decode(encoded, &mut dec_buf)
|
||||
.expect("decode failed after successful encode");
|
||||
|
||||
assert_eq!(
|
||||
&dec_buf[..dec_len], data,
|
||||
"round-trip mismatch: encode→decode produced different output"
|
||||
);
|
||||
});
|
||||
Reference in new issue
Block a user