diff --git a/src/lib/libc/crypt/crypt.c b/src/lib/libc/crypt/crypt.c index e28e94e4..c468d301 100644 --- a/src/lib/libc/crypt/crypt.c +++ b/src/lib/libc/crypt/crypt.c @@ -50,7 +50,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$OpenBSD: crypt.c,v 1.7 1997/02/13 16:58:44 provos Exp $"; +static char rcsid[] = "$OpenBSD: crypt.c,v 1.8 1997/03/27 23:26:28 downsj Exp $"; #endif /* LIBC_SCCS and not lint */ #include @@ -621,7 +621,7 @@ crypt(key, setting) * and padding with zeros. */ q = (u_char *) keybuf; - while (q - (u_char *) keybuf - 8) { + while ((q - (u_char *) keybuf) <= sizeof(keybuf)) { if (*q++ = *key << 1) key++; } @@ -650,7 +650,8 @@ crypt(key, setting) * And XOR with the next 8 characters of the key. */ q = (u_char *) keybuf; - while (q - (u_char *) keybuf - 8 && *key) + while (((q - (u_char *) keybuf) <= sizeof(keybuf)) && + *key) *q++ ^= *key++ << 1; if (des_setkey((u_char *) keybuf))