diff --git a/crates/engine/src/units.rs b/crates/engine/src/units.rs index 83c115316..5575273ca 100644 --- a/crates/engine/src/units.rs +++ b/crates/engine/src/units.rs @@ -142,6 +142,9 @@ pub fn parse_distance(s: &str) -> Option { Some(r) => (true, r.trim()), None => (false, t), }; + if neg && t.starts_with(['-', '+']) { + return None; + } let mut total = 0.0; let mut rest = t; let mut parsed = false; @@ -430,6 +433,14 @@ mod tests { assert_eq!(parse_distance(""), None); } + #[test] + fn parse_distance_rejects_doubled_minus() { + assert_eq!(parse_distance("--5"), None); + assert_eq!(parse_distance("- -3/4"), None); + assert_eq!(parse_distance("-5"), Some(-5.0)); + assert_eq!(parse_distance("-3/4"), Some(-0.75)); + } + #[test] fn parse_distance_needs_a_number() { assert_eq!(parse_distance("-"), None);