From b35e31d96352eabd87753f11cd4e51e5d622304b Mon Sep 17 00:00:00 2001 From: NetterSilver <133535268+Silvertree2010@users.noreply.github.com> Date: Mon, 26 Oct 2026 04:43:37 +0000 Subject: [PATCH] Reject ISO timestamps without ':' between hour and minute Found while testing crates/doc/src/vars.rs:178 (parse_iso_date, `let (h, mi) = (tnum(0, 2)?, tnum(3, 5)?);`) Co-Authored-By: Claude Haiku 5.5 Co-Authored-By: Claude Sonnet 5.5 --- crates/doc/src/vars.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/crates/doc/src/vars.rs b/crates/doc/src/vars.rs index c53eedb1a..4cbf73605 100644 --- a/crates/doc/src/vars.rs +++ b/crates/doc/src/vars.rs @@ -175,6 +175,9 @@ pub fn parse_iso_date(s: &str) -> Option { let t = time.get(a..b)?; t.bytes().all(|c| c.is_ascii_digit()).then(|| t.parse().ok()).flatten() }; + if time.get(2..3) != Some(":") { + return None; + } let (h, mi) = (tnum(0, 2)?, tnum(3, 5)?); let mut i = 5; let mut sec = 0; @@ -290,6 +293,12 @@ impl Document { mod tests { use super::*; + #[test] + fn iso_date_requires_colon_separator() { + assert_eq!(parse_iso_date("2019-12-16T09:48:00Z"), Some(1_576_489_680)); + assert_eq!(parse_iso_date("2019-12-16T09x48:00Z"), None); + } + #[test] fn dates() { // 2026-10-01 14:05 UTC