use oxionnx::Session;
#[test]
fn test_fuzz_random_bytes() {
let mut rng_state: u64 = 12345;
for _ in 0..100 {
let len = (rng_state % 256) as usize;
let bytes: Vec<u8> = (0..len)
.map(|_| {
rng_state = rng_state.wrapping_mul(6364136223846793005).wrapping_add(1);
(rng_state >> 33) as u8
})
.collect();
let _ = Session::from_bytes(&bytes);
}
}
#[test]
fn test_fuzz_truncated() {
let header: Vec<u8> = vec![
0x08, 0x07, 0x12, 0x04, 0x74, 0x65, 0x73, 0x74, 0x3A, 0x10, ];
for cut_at in 0..header.len() {
let _ = Session::from_bytes(&header[..cut_at]);
}
}
#[test]
fn test_fuzz_large_varints() {
let bytes: Vec<u8> = vec![0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01];
let _ = Session::from_bytes(&bytes);
}
#[test]
fn test_fuzz_invalid_wire_types() {
for wire_type in 3..=7u8 {
let bytes = vec![(1 << 3) | wire_type]; let _ = Session::from_bytes(&bytes);
}
}
#[test]
fn test_fuzz_bad_lengths() {
let bytes: Vec<u8> = vec![0x12, 0xFF, 0x01]; let _ = Session::from_bytes(&bytes);
}
#[test]
fn test_fuzz_zero_length_fields() {
let bytes: Vec<u8> = vec![0x12, 0x00]; let _ = Session::from_bytes(&bytes);
let bytes2: Vec<u8> = vec![0x12, 0x00, 0x12, 0x00, 0x12, 0x00]; let _ = Session::from_bytes(&bytes2);
}
#[test]
fn test_fuzz_deep_nesting() {
let mut bytes = vec![0x42u8]; for _ in 0..50 {
let len = bytes.len();
let mut new = vec![0x3A]; let mut l = len;
loop {
let byte = (l & 0x7F) as u8;
l >>= 7;
if l > 0 {
new.push(byte | 0x80);
} else {
new.push(byte);
break;
}
}
new.extend_from_slice(&bytes);
bytes = new;
}
let _ = Session::from_bytes(&bytes);
}
#[test]
fn test_fuzz_huge_claimed_size() {
let bytes: Vec<u8> = vec![
0x12, 0x80, 0x80, 0x80, 0x80, 0x08, ];
let result = Session::from_bytes(&bytes);
assert!(result.is_ok() || result.is_err()); }
#[test]
fn test_fuzz_repeated_flood() {
let mut bytes = Vec::new();
for _ in 0..1000 {
bytes.push(0x08); bytes.push(0x01); }
let _ = Session::from_bytes(&bytes);
}