/ justapi / fuzz / fuzz_targets / fuzz_multipart.rs
swadhinbiswas WIP save-point: production hardening, H3 removal, fmt gate, and accumulated phase work · 7/15/2026
2080d40
25 lines · 835 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#![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;
    });
});