kingfisher/fuzz/fuzz_targets/fuzz_location.rs
2026-03-19 23:52:38 -07:00

27 lines
1,012 B
Rust

#![no_main]
use libfuzzer_sys::fuzz_target;
use kingfisher_core::location::{LocationMapping, OffsetSpan};
fuzz_target!(|data: &[u8]| {
if data.len() < 4 {
return;
}
// Use last 4 bytes to derive offsets, rest as the input text
let text_len = data.len() - 4;
let text = &data[..text_len];
let offset_a = u16::from_le_bytes([data[text_len], data[text_len + 1]]) as usize;
let offset_b = u16::from_le_bytes([data[text_len + 2], data[text_len + 3]]) as usize;
let mapping = LocationMapping::new(text);
// Exercise get_source_point with an arbitrary offset (may be beyond text length)
let point = mapping.get_source_point(offset_a);
assert!(point.line >= 1, "line numbers are 1-indexed");
// Exercise get_source_span with a span that might be empty, inverted, or out of bounds
let start = offset_a.min(offset_b);
let end = offset_a.max(offset_b);
let span = OffsetSpan { start, end };
let _source_span = mapping.get_source_span(&span);
});