=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/date.y,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- src/usr.bin/cvs/date.y 2006/11/09 15:55:55 1.14 +++ src/usr.bin/cvs/date.y 2007/01/20 06:57:54 1.15 @@ -1,5 +1,5 @@ %{ -/* $OpenBSD: date.y,v 1.14 2006/11/09 15:55:55 xsa Exp $ */ +/* $OpenBSD: date.y,v 1.15 2007/01/20 06:57:54 ray Exp $ */ /* ** Originally written by Steven M. Bellovin while @@ -629,6 +629,7 @@ static int lookup(char *buff) { + size_t len; char *p, *q; int i, abbrev; const TABLE *tp; @@ -647,12 +648,14 @@ return (tMERIDIAN); } + len = strlen(buff); /* See if we have an abbreviation for a month. */ - if (strlen(buff) == 3) + if (len == 3) abbrev = 1; - else if (strlen(buff) == 4 && buff[3] == '.') { + else if (len == 4 && buff[3] == '.') { abbrev = 1; buff[3] = '\0'; + --len; } else abbrev = 0; @@ -684,15 +687,14 @@ } /* Strip off any plural and try the units table again. */ - i = strlen(buff) - 1; - if (buff[i] == 's') { - buff[i] = '\0'; + if (len != 0 && buff[len - 1] == 's') { + buff[len - 1] = '\0'; for (tp = UnitsTable; tp->name; tp++) if (strcmp(buff, tp->name) == 0) { yylval.Number = tp->value; return (tp->type); } - buff[i] = 's'; /* Put back for "this" in OtherTable. */ + buff[len - 1] = 's'; /* Put back for "this" in OtherTable. */ } for (tp = OtherTable; tp->name; tp++) @@ -702,7 +704,7 @@ } /* Military timezones. */ - if (buff[1] == '\0' && isalpha(*buff)) { + if (len == 1 && isalpha(*buff)) { for (tp = MilitaryTable; tp->name; tp++) if (strcmp(buff, tp->name) == 0) { yylval.Number = tp->value;