# Problems with INN-2.2.3 and SuSE6.4

Michael Stassen stassenm at indiana.edu
Thu Dec 21 21:41:42 UTC 2000

```
On Wed, 20 Dec 2000, Katsuhiro Kondou wrote:

> Have you read
> http://www.isc.org/ml-archives/inn-workers/2000/01/msg00029.html
> and relevant followups?
> --
> Katsuhiro Kondou
>

I had not read these before, thanks for pointing them out.

It appears that parsedate.y is using the "closest century,
a.k.a. standard sliding window" solution given in

http://www.isc.org/ml-archives/inn-workers/2000/01/msg00055.html

though the comments have not been updated to reflect that.  The problem is
that this solution works only if the given year is a two digit year, but
parsedate.y does not properly check for that.

Currently, parsedate.y does this:

if (\$4 > 100) {
/* assume year is YYYY format, so need not to add 1900*/
yyYear = \$4;
} else {
/* assume year is YY format, so need to add 1900 */
yyYear = \$4 + (yyYear / 100 + (yyYear % 100 - \$4) /50) * 100;
}

So, if \$4 = 100 (localtime gives years since 1900, so 2000 => 100), we get
1900 if yyYear is 2000.  Worse yet, if \$4 is 101 (should be 2001), we get
101, regardless of the current year.

I believe the checks should match the requirements, and we should handle
years 100, 101, etc. as years 2000, 2001, etc.  I propose the following:

if (\$4 > 999) /* in practice, \$4 >1969 would be just as good */
{
/* \$4 is YYYY, use as is */
yyYear = \$4;
}
else if (\$4 < 100)
{
/* \$4 is YY, apply closest century sliding window formula */
yyYear = \$4 + (yyYear / 100 + (yyYear % 100 - \$4) /50) * 100;
}
else
{
/* \$4 is YYY (we assume 1YY, i.e. years since 1900), so add 1900 */
yyYear = 1900 + \$4;
}

Michael Stassen
University Information Technology Services
Indiana University Bloomington
stassenm at indiana.edu

```