forked from mirrors/kingfisher
27 lines
1,012 B
Rust
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);
|
|
});
|