From 7de04a217b347bda3b805766d6d264604364262f Mon Sep 17 00:00:00 2001 From: Marsman Date: Tue, 10 Feb 2026 13:17:40 +0000 Subject: [PATCH] fix: handle char boundary in `parse_weekday` and `parse_month` --- src/header/time/strptime.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/header/time/strptime.rs b/src/header/time/strptime.rs index fd67491626..f6828d799c 100644 --- a/src/header/time/strptime.rs +++ b/src/header/time/strptime.rs @@ -488,7 +488,10 @@ fn parse_am_pm(s: &str) -> Option<(bool, usize)> { fn parse_weekday(s: &str, abbrev: bool) -> Option<(usize, usize)> { let list = if abbrev { &SHORT_DAYS } else { &LONG_DAYS }; for (i, name) in list.iter().enumerate() { - if s.len() >= name.len() && s[0..name.len()].eq_ignore_ascii_case(name) { + if s.len() >= name.len() + && s.get(0..name.len()) + .map_or(false, |sub| sub.eq_ignore_ascii_case(name)) + { return Some((i, name.len())); } } @@ -502,7 +505,10 @@ fn parse_weekday(s: &str, abbrev: bool) -> Option<(usize, usize)> { fn parse_month(s: &str, abbrev: bool) -> Option<(usize, usize)> { let list = if abbrev { &SHORT_MONTHS } else { &LONG_MONTHS }; for (i, name) in list.iter().enumerate() { - if s.len() >= name.len() && s[0..name.len()].eq_ignore_ascii_case(name) { + if s.len() >= name.len() + && s.get(0..name.len()) + .map_or(false, |sub| sub.eq_ignore_ascii_case(name)) + { return Some((i, name.len())); } }