Fix: Reject invalid duration values (e.g. 1h30m)

This commit is contained in:
Maurus Decimus
2026-07-12 14:43:51 +02:00
parent 2543ec7067
commit f73fefdd69
3 changed files with 195 additions and 374 deletions

View File

@@ -101,6 +101,10 @@ impl FromStr for Duration {
for ch in value.chars() {
if ch.is_ascii_digit() {
if !multiplier.is_empty() {
return Err(format!("Invalid duration value {:?}.", value));
}
digits.push(ch);
} else if !ch.is_ascii_whitespace() {
multiplier.push(ch.to_ascii_lowercase());
@@ -119,7 +123,8 @@ impl FromStr for Duration {
digits
.parse::<u64>()
.ok()
.map(|num| std::time::Duration::from_millis(num * multiplier))
.and_then(|num| num.checked_mul(multiplier))
.map(std::time::Duration::from_millis)
.map(Duration)
.ok_or_else(|| format!("Invalid duration value {:?}.", value))
}