Reject '+' sign in slide range numbers

Found while testing crates/engine/src/cmd/file.rs:390-400 (parse_slide_range)

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-27 09:19:49 +01:00
co-authored by Claude Haiku 5.5
parent ee875abffa
commit cd2e780432
+12 -1
View File
@@ -395,6 +395,10 @@ pub fn parse_slide_range(text: &str, count: usize) -> Result<Vec<usize>> {
Some((a, b)) => (a.trim(), b.trim()),
None => (part, part),
};
let digits = |s: &str| !s.is_empty() && s.bytes().all(|c| c.is_ascii_digit());
if !digits(a) || !digits(b) {
return Err(invalid());
}
let (a, b) = (a.parse::<usize>().map_err(|_| invalid())?, b.parse::<usize>().map_err(|_| invalid())?);
let (lo, hi) = (a.min(b), a.max(b));
if lo == 0 || hi > count {
@@ -763,7 +767,14 @@ mod color_at_tests;
mod tests {
#![allow(clippy::unwrap_used, clippy::expect_used)]
use super::write_file;
use super::{parse_slide_range, write_file};
#[test]
fn slide_range_rejects_plus_sign() {
assert!(parse_slide_range("+2", 3).is_err());
assert!(parse_slide_range("+1-+3", 3).is_err());
assert_eq!(parse_slide_range("1-3", 3).unwrap(), vec![0, 1, 2]);
}
fn scratch(name: &str) -> std::path::PathBuf {
let dir = std::env::temp_dir().join(format!("deckcraft-write-file-{}-{name}", std::process::id()));