Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
36 lines
1.1 KiB
Rust
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);
|
|
});
|
|
});
|