Merge pull request #2141 from Silvertree2010/fix/h5392-data-merge-record-range-accepts

Reject signed record numbers in data merge record ranges
This commit is contained in:
Brandon Thomas authored and GitHub committed 2026-11-02 23:24:08 -05:00
commit a4a4cd6ee9
2 files changed
+12

No files matched your search

+4
View File
@@ -210,6 +210,10 @@ fn select_range(range: &str, count: usize, idx: &mut Vec<usize>, seen: &mut std:
}
fn parse_record_no(s: &str) -> Result<u32, String> {
// `parse` alone would accept a leading '+'.
if !s.bytes().all(|b| b.is_ascii_digit()) {
return Err(format!("bad record \"{s}\""));
}
s.parse::<u32>().map_err(|_| format!("bad record \"{s}\""))
}
+8
View File
@@ -1179,6 +1179,14 @@ fn select_records_dedupes_large_ranges_in_first_seen_order() {
assert_eq!(&idx[..3], &[4, 0, 1]);
}
#[test]
fn select_records_rejects_signed_record_numbers() {
for (tok, bad) in [("+2", "+2"), ("1-+3", "+3"), ("+1,+4", "+1")] {
let err = parse::select_records(5, "range", 1, tok, None).unwrap_err();
assert!(err.contains(&format!("bad record \"{bad}\"")), "{tok}: {err}");
}
}
#[test]
fn oversized_data_file_is_refused_before_reading() {
let dir = scratch("oversized");