diff --git a/Cargo.lock b/Cargo.lock index 01b2e0e81..8e85bad40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6228,6 +6228,7 @@ name = "vectorcraft-engine" version = "0.20.0" dependencies = [ "cfb", + "chrono", "craft-docpath", "crc32fast", "flate2", diff --git a/crates/engine/Cargo.toml b/crates/engine/Cargo.toml index 9d4ad7399..87e2d48be 100644 --- a/crates/engine/Cargo.toml +++ b/crates/engine/Cargo.toml @@ -38,6 +38,7 @@ vectorcraft-scriptcheck = { workspace = true } image = { workspace = true } hayro-jpeg2000 = { version = "=0.3.5", default-features = false, features = ["std", "simd"] } flate2 = { workspace = true } +chrono = { workspace = true } # The XML parts of Word documents placed as type (place/docx.rs). roxmltree = "0.21" # The compound file that holds a Word 97-2003 document placed as type (place/doc.rs). diff --git a/crates/engine/src/cmd/fileio/naming.rs b/crates/engine/src/cmd/fileio/naming.rs index b79998170..e701a03d0 100644 --- a/crates/engine/src/cmd/fileio/naming.rs +++ b/crates/engine/src/cmd/fileio/naming.rs @@ -111,15 +111,8 @@ pub fn parse_date(s: &str) -> Option<[i64; 6]> { } let num = |a: usize, b: usize| digits.get(a..b).and_then(|t| t.parse::().ok()); let (y, m, d) = (num(0, 4)?, num(4, 6)?, num(6, 8)?); - let leap = (y % 4 == 0 && y % 100 != 0) || y % 400 == 0; - let days = match m { - 1 | 3 | 5 | 7 | 8 | 10 | 12 => 31, - 4 | 6 | 9 | 11 => 30, - 2 if leap => 29, - 2 => 28, - _ => return None, - }; - (1..=days).contains(&d).then_some([y, m, d, 0, 0, 0]) + chrono::NaiveDate::from_ymd_opt(i32::try_from(y).ok()?, u32::try_from(m).ok()?, u32::try_from(d).ok()?)?; + Some([y, m, d, 0, 0, 0]) } #[cfg(test)]