Resolved PR comments

This commit is contained in:
mingxguo27
2020-09-16 10:28:36 +00:00
parent 6edf67ee2c
commit 3a6a78bbf2
3 changed files with 37 additions and 36 deletions

View File

@@ -38,6 +38,12 @@ jobs:
command: fmt command: fmt
args: --all -- --check 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 - name: Cargo format libraries/cbor
uses: actions-rs/cargo@v1 uses: actions-rs/cargo@v1
with: with:

View File

@@ -5,36 +5,28 @@ extern crate libtock_drivers;
#[macro_use] #[macro_use]
extern crate arrayref; extern crate arrayref;
use libfuzzer_sys::fuzz_target;
use ctap2::ctap::hid::receive::MessageAssembler; use ctap2::ctap::hid::receive::MessageAssembler;
use ctap2::ctap::hid::send::HidPacketIterator; 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; use libtock_drivers::timer::Timestamp;
const DUMMY_TIMESTAMP: Timestamp<isize> = Timestamp::from_ms(0); const DUMMY_TIMESTAMP: Timestamp<isize> = Timestamp::from_ms(0);
const PACKET_TYPE_MASK: u8 = 0x80; const PACKET_TYPE_MASK: u8 = 0x80;
// Converts a byte slice into Message // 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 { if len <= 4 {
let mut cid = [0;4]; let mut cid = [0; 4];
cid[..len].copy_from_slice(data); cid[..len].copy_from_slice(data);
Message{ Message {
cid, cid,
cmd: 0, cmd: 0,
payload: vec![], payload: vec![],
} }
} } else {
else if len == 5{
Message{
cid: array_ref!(data,0,4).clone(),
cmd: data[4],
payload: vec![],
}
}
else{
Message { Message {
cid: array_ref!(data,0,4).clone(), cid: array_ref!(data, 0, 4).clone(),
cmd: data[4], cmd: data[4],
payload: data[5..].to_vec(), 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*/ /* Fuzzing HID packets splitting and assembling functions*/
fuzz_target!(|data: &[u8]| { fuzz_target!(|data: &[u8]| {
let Message{cid, mut cmd, payload} = raw_to_message(data, data.len()); let Message {
if let Some(hid_packet_iterator) = HidPacketIterator::new(Message{cid,cmd,payload:payload.clone()}){ cid,
let packets: Vec<HidPacket> = hid_packet_iterator.collect(); 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(); let mut assembler = MessageAssembler::new();
for (i, packet) in packets.iter().enumerate(){ let packets: Vec<HidPacket> = hid_packet_iterator.collect();
if i != packets.len() - 1 { if let Some((last_packet, first_packets)) = packets.split_last() {
assert_eq!( for packet in first_packets {
assembler.parse_packet(packet, DUMMY_TIMESTAMP), assert_eq!(assembler.parse_packet(packet, DUMMY_TIMESTAMP), Ok(None));
Ok(None)
);
}
else{
cmd = cmd & !PACKET_TYPE_MASK;
assert_eq!(
assembler.parse_packet(packet, DUMMY_TIMESTAMP),
Ok(Some(Message{cid,cmd,payload:payload.clone()}))
);
} }
cmd = cmd & !PACKET_TYPE_MASK;
assert_eq!(
assembler.parse_packet(last_packet, DUMMY_TIMESTAMP),
Ok(Some(Message {
cid,
cmd,
payload: payload.clone()
}))
);
} }
} }
}); });

View File

@@ -23,10 +23,6 @@ extern crate cbor;
extern crate lang_items; extern crate lang_items;
extern crate libtock_core; extern crate libtock_core;
extern crate libtock_drivers; extern crate libtock_drivers;
#[macro_use]
extern crate cbor;
#[macro_use]
extern crate arrayref;
pub mod ctap; pub mod ctap;
pub mod embedded_flash; pub mod embedded_flash;