This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH v2 1/2] [BZ #16141] strptime: extend %z range limits


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]