Reject open-ended page range on a document with no pages

Found while testing crates/print/src/range.rs:69-76

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
NetterSilver
2026-10-24 01:56:46 +00:00
co-authored by Claude Haiku 5.5
parent a2ec27b477
commit 42910de473
+16 -1
View File
@@ -70,7 +70,7 @@ pub fn select_pages(count: usize, range: Option<&str>, labels: &[String], subset
Some(_) if labels.iter().any(|l| l == part) => pages.push(page_of(part, count, labels)?),
Some((a, b)) => {
let from = if a.trim().is_empty() { 0 } else { page_of(a, count, labels)? };
let to = if b.trim().is_empty() { count.saturating_sub(1) } else { page_of(b, count, labels)? };
let to = if b.trim().is_empty() { count.checked_sub(1).ok_or(PrintError::NoPages)? } else { page_of(b, count, labels)? };
if from <= to {
pages.extend(from..=to);
} else {
@@ -115,3 +115,18 @@ fn narrow(pages: Vec<usize>, subset: Subset, reverse: bool) -> Result<Vec<usize>
}
Ok(out)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn open_ended_range_of_empty_document_is_an_error() {
assert!(select_pages(0, Some("-"), &[], Subset::All, false).is_err());
}
#[test]
fn open_ended_range_covers_all_pages() {
assert_eq!(select_pages(5, Some("-"), &[], Subset::All, false).unwrap(), vec![0, 1, 2, 3, 4]);
}
}