#![no_main]
use bytes::Bytes;
use http_body_util::Full;
use justapi_core::multipart::parse_multipart;
use libfuzzer_sys::fuzz_target;
fuzz_target!(|data: &[u8]| {
let boundary = "JUSTAPIFUZZBOUNDARY";
let ct = format!("multipart/form-data; boundary={}", boundary);
// Feed attacker-controlled bytes through the multipart parser. The parser
// handles untrusted input, so it must never panic — only return Ok/Err.
// Wrapping raw fuzz bytes as a body means even malformed structures are
// exercised (missing boundaries, embedded NULs, huge fields, etc.).
let rt = match tokio::runtime::Runtime::new() {
Ok(rt) => rt,
Err(_) => return,
};
rt.block_on(async {
let body = Full::new(Bytes::from(data.to_vec()));
let _ = parse_multipart(body, &ct).await;
});
});