mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-11-09 04:22:20 +00:00
Reject '+' sign in print page ranges (#4931)
This commit is contained in:
1 parent
ebcc564f1e
commit
51655eab0c
1 file changed
+11
@@ -51,6 +51,10 @@ fn page_of(tok: &str, count: usize, labels: &Labels) -> Result<usize, PrintError
|
||||
if let Some(i) = labels.get(t) {
|
||||
return Ok(i);
|
||||
}
|
||||
// `usize::from_str` accepts a leading '+', which is not part of a page number.
|
||||
if !t.bytes().all(|b| b.is_ascii_digit()) {
|
||||
return Err(PrintError::NotAPage(t.to_string()));
|
||||
}
|
||||
match t.parse::<usize>() {
|
||||
Ok(n) if n >= 1 && n <= count => Ok(n - 1),
|
||||
Ok(n) => Err(PrintError::OutOfRange(n, count)),
|
||||
@@ -176,6 +180,13 @@ mod tests {
|
||||
assert!(select_pages(0, Some("-"), &[], Subset::All, false).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn plus_sign_is_not_a_page() {
|
||||
for r in ["+3", "+2-4", "2-+4"] {
|
||||
assert!(matches!(select_pages(5, Some(r), &[], Subset::All, false), Err(PrintError::NotAPage(_))), "accepted {r}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn open_ended_range_covers_all_pages() {
|
||||
assert_eq!(select_pages(5, Some("-"), &[], Subset::All, false).unwrap(), vec![0, 1, 2, 3, 4]);
|
||||
|
||||
Reference in new issue
Block a user