fix: check whether the parsed time contains timezone

This commit is contained in:
yuankunzhang
2025-06-04 16:42:32 +08:00
parent 1a6a6f688a
commit 3fe06c0b94
+16 -1
View File
@@ -258,10 +258,18 @@ pub fn parse(input: &mut &str) -> ModalResult<Vec<Item>> {
if time_seen {
return Err(expect_error(input, "time cannot appear more than once"));
}
time_seen = true;
if t.offset.is_some() {
if tz_seen {
return Err(expect_error(
input,
"timezone cannot appear more than once",
));
}
tz_seen = true;
}
time_seen = true;
}
Item::Year(_) => {
if year_seen {
@@ -591,6 +599,13 @@ mod tests {
.to_string()
.contains("timezone cannot appear more than once"));
let result = parse(&mut "m1y");
assert!(result.is_err());
assert!(result
.unwrap_err()
.to_string()
.contains("timezone cannot appear more than once"));
let result = parse(&mut "2025-05-19 abcdef");
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("unexpected input"));