1
0
mirror of https://github.com/esphome/esphome.git synced 2026-02-08 00:31:58 +00:00
This commit is contained in:
J. Nick Koston
2026-01-29 22:31:23 -06:00
parent 973105f2e5
commit bec7d6d223
2 changed files with 26 additions and 6 deletions

View File

@@ -370,18 +370,20 @@ bool parse_posix_tz(const char *tz_string, ParsedTimezone &result) {
result.dst_offset_seconds = result.std_offset_seconds - 3600;
}
// Parse DST rules if present
// Parse DST rules if present (POSIX requires both start and end if any rules specified)
if (*p == ',') {
p++;
if (!internal::parse_dst_rule(p, result.dst_start)) {
return false;
}
if (*p == ',') {
p++;
if (!internal::parse_dst_rule(p, result.dst_end)) {
return false;
}
// Second rule is required per POSIX
if (*p != ',') {
return false;
}
p++;
if (!internal::parse_dst_rule(p, result.dst_end)) {
return false;
}
}

View File

@@ -361,6 +361,24 @@ TEST(PosixTzParser, MFormatInvalidDayOfWeek7) {
EXPECT_FALSE(parse_posix_tz("EST5EDT,M3.2.7,M11.1.0", tz));
}
TEST(PosixTzParser, MissingEndRule) {
ParsedTimezone tz;
// POSIX requires both start and end rules if any rules are specified
EXPECT_FALSE(parse_posix_tz("EST5EDT,M3.2.0", tz));
}
TEST(PosixTzParser, MissingEndRuleJFormat) {
ParsedTimezone tz;
// POSIX requires both start and end rules if any rules are specified
EXPECT_FALSE(parse_posix_tz("EST5EDT,J60", tz));
}
TEST(PosixTzParser, MissingEndRulePlainDay) {
ParsedTimezone tz;
// POSIX requires both start and end rules if any rules are specified
EXPECT_FALSE(parse_posix_tz("EST5EDT,60", tz));
}
// ============================================================================
// Large offset tests
// ============================================================================