[tz] [PATCH 3/4] Fix crash with TZ="EST5EDT4,0/0,J365/25"
Paul Eggert
eggert at cs.ucla.edu
Thu Feb 18 03:29:43 UTC 2021
* localtime.c (tzparse): Fix off-by-(stdoffset-dstoffset) bug.
Without this fix, "zdump -v 'EST5EDT4,0/0,J365/25'" would dump
core on some platforms. This string is an extension to POSIX,
specified by Internet RFC 8536. No existing tzdb zones use
all-year DST, so this bug should trigger only when TZ is
explicitly set to an all-year DST string.
---
NEWS | 4 ++++
localtime.c | 4 +---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/NEWS b/NEWS
index a22e8ff..8e968eb 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,10 @@ Unreleased, experimental changes
Changes to code
+ Fix bug that caused 'localtime' etc. to crash when TZ was
+ set to a all-year DST string like "EST5EDT4,0/0,J365/25" that does
+ not conform to POSIX but does conform to Internet RFC 8536.
+
Fix bug in zic -r; in some cases, the dummy time type after the
last time transition disagreed with the TZ string, contrary to
Internet RFC 8563 section 3.3.
diff --git a/localtime.c b/localtime.c
index 82a3b70..333c6ea 100644
--- a/localtime.c
+++ b/localtime.c
@@ -1181,9 +1181,7 @@ tzparse(const char *name, struct state *sp, bool lastditch)
}
if (reversed
|| (starttime < endtime
- && (endtime - starttime
- < (yearsecs
- + (stdoffset - dstoffset))))) {
+ && endtime - starttime < yearsecs)) {
if (TZ_MAX_TIMES - 2 < timecnt)
break;
sp->ats[timecnt] = janfirst;
--
2.27.0
More information about the tz
mailing list