Coverage Report

Created: 2025-11-16 06:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/quiche/fuzz/src/packets_recv_server.rs
Line
Count
Source
1
#![no_main]
2
3
#[macro_use]
4
extern crate libfuzzer_sys;
5
6
use std::net::SocketAddr;
7
8
use std::sync::Mutex;
9
use std::sync::Once;
10
use std::sync::OnceLock;
11
12
static CONFIG: OnceLock<Mutex<quiche::Config>> = OnceLock::new();
13
14
static SCID: quiche::ConnectionId<'static> =
15
    quiche::ConnectionId::from_ref(&[0; quiche::MAX_CONN_ID_LEN]);
16
17
static LOG_INIT: Once = Once::new();
18
19
fuzz_target!(|data: &[u8]| {
20
    quiche_fuzz::reset_rand_for_fuzzing();
21
22
    let from: SocketAddr = "127.0.0.1:1234".parse().unwrap();
23
    let to: SocketAddr = "127.0.0.1:4321".parse().unwrap();
24
25
1
    LOG_INIT.call_once(|| env_logger::builder().format_timestamp_nanos().init());
26
27
    let packets = quiche_fuzz::PktsData { data };
28
29
1
    let config = CONFIG.get_or_init(|| {
30
1
        let (crt_path, key_path) = quiche_fuzz::get_cert_path();
31
32
1
        let mut config = quiche::Config::new(quiche::PROTOCOL_VERSION).unwrap();
33
1
        config.load_cert_chain_from_pem_file(&crt_path).unwrap();
34
1
        config.load_priv_key_from_pem_file(&key_path).unwrap();
35
1
        config
36
1
            .set_application_protos(quiche::h3::APPLICATION_PROTOCOL)
37
1
            .unwrap();
38
1
        config.set_initial_max_data(30);
39
1
        config.set_initial_max_stream_data_bidi_local(15);
40
1
        config.set_initial_max_stream_data_bidi_remote(15);
41
1
        config.set_initial_max_stream_data_uni(10);
42
1
        config.set_initial_max_streams_bidi(3);
43
1
        config.set_initial_max_streams_uni(3);
44
45
1
        config.discover_pmtu(true);
46
1
        config.enable_early_data();
47
1
        config.enable_hystart(true);
48
49
1
        Mutex::new(config)
50
1
    });
51
52
    let mut conn =
53
        quiche::accept(&SCID, None, to, from, &mut config.lock().unwrap())
54
            .unwrap();
55
56
    let info = quiche::RecvInfo { from, to };
57
58
    let mut h3_conn = None;
59
    for pkt in packets.iter() {
60
        quiche_fuzz::server_process(pkt, &mut conn, &mut h3_conn, info);
61
    }
62
});