usbip-rs/lib/fuzz/fuzz_targets/fuzz_urb_cdc.rs
Davíð Steinn Geirsson dfc7e366d9 feat: add fuzz_urb_cdc target
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 22:06:36 +00:00

36 lines
1.1 KiB
Rust

#![no_main]
use libfuzzer_sys::fuzz_target;
use std::sync::Arc;
use usbip_rs::mock::MockSocket;
use usbip_rs::{
ClassCode, UsbDevice, UsbInterfaceHandler,
cdc::{UsbCdcAcmHandler, CDC_ACM_SUBCLASS},
};
fuzz_target!(|data: &[u8]| {
let rt = tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap();
rt.block_on(async {
let handler = Arc::new(UsbCdcAcmHandler::new());
let device = UsbDevice::new(0)
.unwrap()
.with_interface(
ClassCode::CDC as u8,
CDC_ACM_SUBCLASS,
0x00,
Some("Fuzz CDC ACM"),
UsbCdcAcmHandler::endpoints(),
handler as Arc<dyn UsbInterfaceHandler>,
)
.unwrap();
let mock = MockSocket::new(data.to_vec());
let output = mock.output_handle();
let _ = usbip_rs::handle_urb_loop(mock, Arc::new(device)).await;
let output_bytes = output.lock().unwrap();
usbip_rs::fuzz_helpers::assert_usbip_responses_valid(&output_bytes);
});
});