From patchwork Wed Dec 3 02:27:40 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Perkins X-Patchwork-Id: 4048 Received: (qmail 26575 invoked by alias); 3 Dec 2014 02:28:40 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 25841 invoked by uid 89); 3 Dec 2014 02:28:00 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ig0-f177.google.com X-Received: by 10.50.66.162 with SMTP id g2mr6278234igt.40.1417573675313; Tue, 02 Dec 2014 18:27:55 -0800 (PST) From: James Perkins To: libc-alpha@sourceware.org Subject: [PATCH v2 1/2] [BZ #16141] strptime: extend %z range limits Date: Tue, 2 Dec 2014 18:27:40 -0800 Message-Id: <1417573661-9902-1-git-send-email-james@loowit.net> 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)