/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 | | }); |