Resolved PR comments
This commit is contained in:
6
.github/workflows/cargo_fmt.yml
vendored
6
.github/workflows/cargo_fmt.yml
vendored
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
cmd = cmd & !PACKET_TYPE_MASK;
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
assembler.parse_packet(packet, DUMMY_TIMESTAMP),
|
assembler.parse_packet(last_packet, DUMMY_TIMESTAMP),
|
||||||
Ok(Some(Message{cid,cmd,payload:payload.clone()}))
|
Ok(Some(Message {
|
||||||
|
cid,
|
||||||
|
cmd,
|
||||||
|
payload: payload.clone()
|
||||||
|
}))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user