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]

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


On 3 December 2014 at 02:27, James Perkins <james@loowit.net> wrote:


> 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(-)

The patch looks ok modulo the nit below. It would be good to add a test however.

> 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 */

The comment should be a sentence so start with a capital and end with
a full-stop and a couple of spaces.

> +           if (neg && val > 2400)
> +             return NULL;
> +           if (!neg && val > 2500)
>               return NULL;
>             tm->tm_gmtoff = (val * 3600) / 100;
>             if (neg)
> --
> 1.7.9.5
>



-- 
Will Newton
Toolchain Working Group, Linaro


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