#[test] fn find_sni() { // ClientHello with SNI extension let range = super::find_sni(BUF_WITH_SNI).unwrap(); let expected_range = BUF_WITH_SNI.len() - 18..BUF_WITH_SNI.len() - 9;
assert_eq!(range, expected_range);
assert_eq!(&BUF_WITH_SNI[range], b"localhost");
}
#[test] fn find_sni_no_sni() { // ClientHello without SNI extension letmut buf = Vec::from(&BUF_WITH_SNI[..BUF_WITH_SNI.len() - 39]); let len = buf.len();
assert_eq!(&buf[len - 2..len], &[0x01, 0xcb], "check extensions length");
buf[len - 2..len].copy_from_slice(&[0x00, 0x00]); // Set extensions length to 0
assert!(super::find_sni(&buf).is_none());
}
#[test] fn find_sni_invalid_sni() { // ClientHello with an SNI extension truncated somewhere in the hostname let truncated = &BUF_WITH_SNI[..BUF_WITH_SNI.len() - 15];
assert!(super::find_sni(truncated).is_none());
}
#[test] fn find_sni_invalid_sni_length() { // ClientHello with an SNI extension with an invalid length letmut buf = Vec::from(BUF_WITH_SNI); let len = buf.len();
assert_eq!(&buf[len - 23..len - 21], &[0x00, 0x0c], "check SNI length");
buf[len - 23..len - 21].copy_from_slice(&[0x00, 0x02]); // Set Server Name List length to 2
assert!(super::find_sni(&buf).is_none());
}
/// An SNI hostname that ends exactly at the buffer boundary parses successfully. #[test] fn find_sni_hostname_ends_at_buffer_boundary() { // Trim the trailing status_request bytes so the SNI hostname reaches the // very end of the buffer. let trimmed = &BUF_WITH_SNI[..BUF_WITH_SNI.len() - 9]; let range = super::find_sni(trimmed).expect("SNI at buffer boundary should parse");
assert_eq!(&trimmed[range], b"localhost");
}
/// An SNI list length of 4 (the minimum containing a 1-byte hostname) must parse successfully. #[test] fn find_sni_near_minimum_sni_len() { // Construct a minimal SNI where the SNI list contains exactly 1 hostname byte. // sni_len = 4: name_type (1) + host_name_len (2) + host_name (1) = 4. letmut buf = Vec::from(BUF_WITH_SNI); let len = buf.len(); // SNI list length is at buf[len-23..len-21] = [0x00, 0x0c] = 12
assert_eq!(
&buf[len - 23..len - 21],
&[0x00, 0x0c], "SNI list length offset"
); // Set to 4.
buf[len - 23] = 0x00;
buf[len - 22] = 0x04; // Ext len was 14 (0x0e) at buf[len-25..len-23], now it's 2+4=6.
buf[len - 25] = 0x00;
buf[len - 24] = 0x06; // host_name length at buf[len-20..len-18] was [0x00, 0x09], set to [0x00, 0x01].
buf[len - 20] = 0x00;
buf[len - 19] = 0x01; // The result must be Some (sni_len=4 >= 3 passes the guard).
assert!(super::find_sni(&buf).is_some());
}
#[test] fn find_sni_no_ci() { // Not a ClientHello (msg_type != 1) let buf = [0; 1];
assert!(super::find_sni(&buf).is_none());
}
#[test] fn find_sni_malformed_ci() { // Buffer starting with `1` but otherwise malformed let buf = [1; 1];
assert!(super::find_sni(&buf).is_none());
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.23 Sekunden
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.