Date: Tue, 22 Jun 1999 05:50:02 -0700 (PDT) From: Sheldon Hearn <sheldonh@uunet.co.za> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/10131: bug in strptime(3) Message-ID: <199906221250.FAA41607@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/10131; it has been noted by GNATS.
From: Sheldon Hearn <sheldonh@uunet.co.za>
To: tadf@kt.rim.or.jp
Cc: freebsd-gnats-submit@freebsd.org
Subject: Re: bin/10131: bug in strptime(3)
Date: Tue, 22 Jun 1999 14:45:36 +0200
For a patch this small, it's probably safe to include it directly,
rather than uuencoding it.
I've attached a plaintext copy here so that it gets into the PR as
feedback. Note that the last hunk of the diff applies 2 lines offset. Be
sure to send feedback if this diff is not being applied to CURRENT
source (rev 1.6) as intended.
Ciao,
Sheldon.
--- strptime.c.orig Sun Sep 13 07:20:40 1998
+++ strptime.c Mon Feb 15 00:34:16 1999
@@ -159,10 +159,10 @@
i *= 10;
i += *buf - '0';
}
- if (i > 365)
+ if (i < 1 || i > 366)
return 0;
- tm->tm_yday = i;
+ tm->tm_yday = i - 1;
break;
case 'M':
@@ -177,8 +177,13 @@
i *= 10;
i += *buf - '0';
}
- if (i > 59)
- return 0;
+ if (c == 'M') {
+ if (i > 59)
+ return 0;
+ } else {
+ if (i > 60)
+ return 0;
+ }
if (c == 'M')
tm->tm_min = i;
@@ -259,6 +264,24 @@
buf += len;
break;
+ case 'w':
+ if (!isdigit((unsigned char)*buf))
+ return 0;
+
+ for (i = 0; *buf != 0 && isdigit((unsigned char)*buf); buf++) {
+ i *= 10;
+ i += *buf - '0';
+ }
+ if (i > 6)
+ return 0;
+
+ tm->tm_wday = i;
+
+ if (*buf != 0 && isspace((unsigned char)*buf))
+ while (*ptr != 0 && !isspace((unsigned char)*ptr))
+ ptr++;
+ break;
+
case 'd':
case 'e':
if (!isdigit((unsigned char)*buf))
@@ -337,6 +360,23 @@
return 0;
tm->tm_year = i;
+
+ if (*buf != 0 && isspace((unsigned char)*buf))
+ while (*ptr != 0 && !isspace((unsigned char)*ptr))
+ ptr++;
+ break;
+
+ case 'U':
+ case 'W':
+ if (!isdigit((unsigned char)*buf))
+ return 0;
+
+ for (i = 0; *buf != 0 && isdigit((unsigned char)*buf); buf++) {
+ i *= 10;
+ i += *buf - '0';
+ }
+ if (i > 53)
+ return 0;
if (*buf != 0 && isspace((unsigned char)*buf))
while (*ptr != 0 && !isspace((unsigned char)*ptr))
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199906221250.FAA41607>
