The wire protocol is re-specified as DongLoRa Protocol v2 (see PROTOCOL.md). Every type_id, tag-correlation rule, and field layout is incompatible with 0.1.0. * Add PROTOCOL.md as the normative spec for the v2 wire format. * Replace framing.rs with a streaming FrameDecoder that emits (type_id, tag, payload) triples on each COBS-delimited, CRC-checked frame. * Split the single-file lib.rs into dedicated modules: frame, commands, events, errors, modulation, info, crc, chip_id. Re-exports preserve convenience imports at the crate root. * Replace RadioConfig / Bandwidth with a Modulation enum covering LoRa, FSK/GFSK, LR-FHSS, and FLRC, each with its own typed parameter struct. * Add TxFlags, RxOrigin, SetConfigResult, OkPayload to model v2 response shapes, and RadioChipId for GET_INFO. * Rewrite fuzz corpus: replace the 4 cobs_* / command_roundtrip targets with decoder_feed, frame_roundtrip, lora_config_roundtrip, and parse_device_message; drop parse_radio_config. * Expand proptest and mutation-killer coverage for the new wire shape. * Rewrite canonical-byte test vectors against the v2 spec.
17 lines
483 B
Rust
17 lines
483 B
Rust
//! `FrameDecoder::feed` must never panic on arbitrary input, and any
|
|
//! yielded payload slice must fit the documented bounds.
|
|
|
|
#![no_main]
|
|
|
|
use donglora_protocol::{FrameDecoder, FrameResult, MAX_PAYLOAD_FIELD};
|
|
use libfuzzer_sys::fuzz_target;
|
|
|
|
fuzz_target!(|data: &[u8]| {
|
|
let mut decoder = FrameDecoder::new();
|
|
decoder.feed(data, |res| {
|
|
if let FrameResult::Ok { payload, .. } = res {
|
|
assert!(payload.len() <= MAX_PAYLOAD_FIELD);
|
|
}
|
|
});
|
|
});
|