Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Jan 2000 21:40:02 -0800 (PST)
From:      "Sergey N. Voronkov" <serg@dor.zaural.ru>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: bin/15872: Y2k bug in at(1)
Message-ID:  <200001210540.VAA14558@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/15872; it has been noted by GNATS.

From: "Sergey N. Voronkov" <serg@dor.zaural.ru>
To: cjc@cc942873-a.ewndsr1.nj.home.com
Cc: FreeBSD-gnats-submit@FreeBSD.ORG, sheldonh@uunet.co.za
Subject: Re: bin/15872: Y2k bug in at(1)
Date: Fri, 21 Jan 2000 10:28:10 +0500 (YEKT)

 > >     if (year > 99) {
 > >      if (year > 1899)
 > >          year -= 1900;
 > >      else
 > >          panic("garbled time");
 > >     } ...
 >  
 > What odd code. :-)
 > 
 > I'd fix this by making proper tm_year adjustments before those calls to
 > assign_date() which pass it a tm_year value.
 >     
 > Have you chatted to the authors?  Are they unreachable?
 >     
 > Ciao,
 > Sheldon.
 >     
 > Index: parsetime.c
 > ===================================================================
 > RCS file: /home/ncvs/src/usr.bin/at/parsetime.c,v
 > retrieving revision 1.19
 [...]
 
 It's another way to do this right. I'v adapted OpenBSD Team patch
 .
 And, Mr. Sheldon, can you, please, make one of two changes in STABLE branch ?
 
 Best Regards,
 Sergey N. Voronkov.
 
 --- /usr/src/usr.bin/at/parsetime.c	Sun Aug 29 21:25:26 1999
 +++ parsetime.c	Fri Jan 21 10:21:56 2000
 @@ -417,27 +417,30 @@
  static void
  assign_date(struct tm *tm, long mday, long mon, long year)
  {
 -    if (year > 99) {
 -	if (year > 1899)
 -	    year -= 1900;
 -	else
 -	    panic("garbled time");
 -    } else if (year != -1) {
 +
 +    /*
 +     * Convert year into tm_year format (year - 1900).
 +     * We may be given the year in 2 digit, 4 digit, or tm_year format.
 +     */
 +#define TM_YEAR_BASE 1900
 +    if (year != -1) {
  	struct tm *lt;
  	time_t now;
  
  	time(&now);
  	lt = localtime(&now);
  
 -	/*
 -	 * check if the specified year is in the next century.
 -	 * allow for one year of user error as many people will
 -	 * enter n - 1 at the start of year n.
 -	 */
 -	if (year < (lt->tm_year % 100) - 1)
 -	    year += 100;
 -	/* adjust for the year 2000 and beyond */
 -	year += lt->tm_year - (lt->tm_year % 100);
 +        if (year >= TM_YEAR_BASE)
 +                year -= TM_YEAR_BASE;   /* convert from 4 digit year */
 +        else if (year < 100) {
 +                /* Convert to tm_year assuming current century */
 +                year += (lt->tm_year / 100) * 100;
 +
 +                if (year == lt->tm_year - 1)
 +                       year++;         /* Common off by one error */
 +                else if (year < lt->tm_year)
 +                       year += 100;    /* must be in next century */
 +        }
      }
  
      if (year < 0 &&
 


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?200001210540.VAA14558>