This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH v2 1/2] [BZ #16141] strptime: extend %z range limits
- From: James Perkins <james at loowit dot net>
- To: libc-alpha at sourceware dot org
- Date: Tue, 2 Dec 2014 18:27:40 -0800
- Subject: [PATCH v2 1/2] [BZ #16141] strptime: extend %z range limits
- Authentication-results: sourceware.org; auth=none
This is a fix for [BZ #16141] strptime %z offset restriction.
strptime supports the parsing of a timezone offset from UTC time into the
broken-out time field tm_gmtoff. It supports timezone offsets between
UTC-12:00 and UTC+12:00, returning an error (NULL) for values outside
that range.
However, time zone offsets outside the current range limits exist both
currently and historically:
* Present day:
- Pacific/Auckland (New Zealand) summer time +13:00
- Pacific/Kiritimati (Christmas Island) +14:00
- Pacific/Apia (Samoa) summer time +14:00
* Historical offsets exceeded +15:00/-15:00
* POSIX supports -24:00 to +25:00
* Paul Eggert notes:
- https://sourceware.org/ml/libc-alpha/2014-12/msg00068.html
So, extend the timezone offset range to UTC-24:00 to UTC+25:00.
James
2014-12-02 James Perkins james@loowit.net
[BZ #16141]
* time/strptime_l.c (__strptime_internal): Extend %z timezone
offset range limits to UTC-24:00 to UTC+25:00 to parse current
and historical uses.
---
time/strptime_l.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/time/strptime_l.c b/time/strptime_l.c
index b3a612e..1cdce41 100644
--- a/time/strptime_l.c
+++ b/time/strptime_l.c
@@ -777,7 +777,10 @@ __strptime_internal (rp, fmt, tmp, statep LOCALE_PARAM)
return NULL;
val = (val / 100) * 100 + ((val % 100) * 50) / 30;
}
- if (val > 1200)
+ /* valid range UTC-24 to +25, ala POSIX */
+ if (neg && val > 2400)
+ return NULL;
+ if (!neg && val > 2500)
return NULL;
tm->tm_gmtoff = (val * 3600) / 100;
if (neg)
--
1.7.9.5