Hi,

Theo de Raadt wrote on Sun, Mar 24, 2019 at 12:48:03PM -0600:
> Hiltjo Posthuma <[email protected]> wrote:
>> On Sun, Feb 24, 2019 at 01:11:39PM +0100, Hiltjo Posthuma wrote:

>>> 2. The military/nautical UTC offsets are [...]

broken by design.

>> As discussed previously for point 2 I think it is fine to either
>> return NULL and not handle military zones like most libc's do

> My position is we should delete support.

So here is a diff to delete support for the military time zones.
Just error out when encountering them.  That's the best thing we
can do because their meaning is ill-defined in the first place.

I'm not mixing anything else into this diff.  The other bugs should
be handled separately.

OK?
  Ingo


Index: strptime.3
===================================================================
RCS file: /cvs/src/lib/libc/time/strptime.3,v
retrieving revision 1.27
diff -u -p -r1.27 strptime.3
--- strptime.3  21 Feb 2019 19:10:32 -0000      1.27
+++ strptime.3  9 May 2019 18:29:19 -0000
@@ -242,15 +242,7 @@ time
 or
 .Ql Standard
 .Pq Dq S
-time;
-a single letter military timezone specified as:
-.Dq A
-through
-.Dq I
-and
-.Dq K
-through
-.Dq Y .
+time.
 .It Cm \&%Z
 timezone name or no characters when timezone information is unavailable.
 .It Cm \&%%
Index: strptime.c
===================================================================
RCS file: /cvs/src/lib/libc/time/strptime.c,v
retrieving revision 1.25
diff -u -p -r1.25 strptime.c
--- strptime.c  21 Feb 2019 19:10:32 -0000      1.25
+++ strptime.c  9 May 2019 18:29:19 -0000
@@ -520,25 +520,6 @@ literal:
                                        bp = ep;
                                        continue;
                                }
-
-                               if ((*bp >= 'A' && *bp <= 'I') ||
-                                   (*bp >= 'L' && *bp <= 'Y')) {
-#ifdef TM_GMTOFF
-                                       /* Argh! No 'J'! */
-                                       if (*bp >= 'A' && *bp <= 'I')
-                                               tm->TM_GMTOFF =
-                                                   ('A' - 1) - (int)*bp;
-                                       else if (*bp >= 'L' && *bp <= 'M')
-                                               tm->TM_GMTOFF = 'A' - (int)*bp;
-                                       else if (*bp >= 'N' && *bp <= 'Y')
-                                               tm->TM_GMTOFF = (int)*bp - 'M';
-#endif
-#ifdef TM_ZONE
-                                       tm->TM_ZONE = NULL; /* XXX */
-#endif
-                                       bp++;
-                                       continue;
-                               }
                                return NULL;
                        }
                        offs = 0;

Reply via email to