diff --git a/.github/workflows/cargo_fmt.yml b/.github/workflows/cargo_fmt.yml index fa04d31..a3cbd70 100644 --- a/.github/workflows/cargo_fmt.yml +++ b/.github/workflows/cargo_fmt.yml @@ -38,12 +38,18 @@ jobs: command: fmt args: --all -- --check + - name: Cargo format fuzz/ + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --manifest-path fuzz/Cargo.toml --all -- --check + - name: Cargo format libraries/cbor uses: actions-rs/cargo@v1 with: command: fmt args: --manifest-path libraries/cbor/Cargo.toml --all -- --check - + - name: Cargo format libraries/cbor/fuzz uses: actions-rs/cargo@v1 with: diff --git a/fuzz/fuzz_targets/fuzz_target_split_assemble.rs b/fuzz/fuzz_targets/fuzz_target_split_assemble.rs index 2c06ca0..02ec7f0 100644 --- a/fuzz/fuzz_targets/fuzz_target_split_assemble.rs +++ b/fuzz/fuzz_targets/fuzz_target_split_assemble.rs @@ -5,36 +5,28 @@ extern crate libtock_drivers; #[macro_use] extern crate arrayref; -use libfuzzer_sys::fuzz_target; use ctap2::ctap::hid::receive::MessageAssembler; use ctap2::ctap::hid::send::HidPacketIterator; -use ctap2::ctap::hid::{Message, HidPacket}; +use ctap2::ctap::hid::{HidPacket, Message}; +use libfuzzer_sys::fuzz_target; use libtock_drivers::timer::Timestamp; const DUMMY_TIMESTAMP: Timestamp = Timestamp::from_ms(0); const PACKET_TYPE_MASK: u8 = 0x80; // Converts a byte slice into Message -fn raw_to_message(data: &[u8], len: usize) -> Message{ +fn raw_to_message(data: &[u8], len: usize) -> Message { if len <= 4 { - let mut cid = [0;4]; + let mut cid = [0; 4]; cid[..len].copy_from_slice(data); - Message{ + Message { cid, cmd: 0, payload: vec![], } - } - else if len == 5{ - Message{ - cid: array_ref!(data,0,4).clone(), - cmd: data[4], - payload: vec![], - } - } - else{ + } else { Message { - cid: array_ref!(data,0,4).clone(), + cid: array_ref!(data, 0, 4).clone(), cmd: data[4], payload: data[5..].to_vec(), } @@ -43,24 +35,31 @@ fn raw_to_message(data: &[u8], len: usize) -> Message{ /* Fuzzing HID packets splitting and assembling functions*/ fuzz_target!(|data: &[u8]| { - let Message{cid, mut cmd, payload} = raw_to_message(data, data.len()); - if let Some(hid_packet_iterator) = HidPacketIterator::new(Message{cid,cmd,payload:payload.clone()}){ - let packets: Vec = hid_packet_iterator.collect(); + let Message { + cid, + mut cmd, + payload, + } = raw_to_message(data, data.len()); + if let Some(hid_packet_iterator) = HidPacketIterator::new(Message { + cid, + cmd, + payload: payload.clone(), + }) { let mut assembler = MessageAssembler::new(); - for (i, packet) in packets.iter().enumerate(){ - if i != packets.len() - 1 { - assert_eq!( - assembler.parse_packet(packet, DUMMY_TIMESTAMP), - Ok(None) - ); - } - else{ - cmd = cmd & !PACKET_TYPE_MASK; - assert_eq!( - assembler.parse_packet(packet, DUMMY_TIMESTAMP), - Ok(Some(Message{cid,cmd,payload:payload.clone()})) - ); + let packets: Vec = hid_packet_iterator.collect(); + if let Some((last_packet, first_packets)) = packets.split_last() { + for packet in first_packets { + assert_eq!(assembler.parse_packet(packet, DUMMY_TIMESTAMP), Ok(None)); } + cmd = cmd & !PACKET_TYPE_MASK; + assert_eq!( + assembler.parse_packet(last_packet, DUMMY_TIMESTAMP), + Ok(Some(Message { + cid, + cmd, + payload: payload.clone() + })) + ); } } }); diff --git a/src/lib.rs b/src/lib.rs index fe7bd4c..0df6552 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,10 +23,6 @@ extern crate cbor; extern crate lang_items; extern crate libtock_core; extern crate libtock_drivers; -#[macro_use] -extern crate cbor; -#[macro_use] -extern crate arrayref; pub mod ctap; pub mod embedded_flash;