diff options
Diffstat (limited to 'src/lib/libc/crypt/crypt.c')
| -rw-r--r-- | src/lib/libc/crypt/crypt.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/lib/libc/crypt/crypt.c b/src/lib/libc/crypt/crypt.c index e28e94e42f..c468d301a2 100644 --- a/src/lib/libc/crypt/crypt.c +++ b/src/lib/libc/crypt/crypt.c | |||
| @@ -50,7 +50,7 @@ | |||
| 50 | */ | 50 | */ |
| 51 | 51 | ||
| 52 | #if defined(LIBC_SCCS) && !defined(lint) | 52 | #if defined(LIBC_SCCS) && !defined(lint) |
| 53 | static char rcsid[] = "$OpenBSD: crypt.c,v 1.7 1997/02/13 16:58:44 provos Exp $"; | 53 | static char rcsid[] = "$OpenBSD: crypt.c,v 1.8 1997/03/27 23:26:28 downsj Exp $"; |
| 54 | #endif /* LIBC_SCCS and not lint */ | 54 | #endif /* LIBC_SCCS and not lint */ |
| 55 | 55 | ||
| 56 | #include <sys/types.h> | 56 | #include <sys/types.h> |
| @@ -621,7 +621,7 @@ crypt(key, setting) | |||
| 621 | * and padding with zeros. | 621 | * and padding with zeros. |
| 622 | */ | 622 | */ |
| 623 | q = (u_char *) keybuf; | 623 | q = (u_char *) keybuf; |
| 624 | while (q - (u_char *) keybuf - 8) { | 624 | while ((q - (u_char *) keybuf) <= sizeof(keybuf)) { |
| 625 | if (*q++ = *key << 1) | 625 | if (*q++ = *key << 1) |
| 626 | key++; | 626 | key++; |
| 627 | } | 627 | } |
| @@ -650,7 +650,8 @@ crypt(key, setting) | |||
| 650 | * And XOR with the next 8 characters of the key. | 650 | * And XOR with the next 8 characters of the key. |
| 651 | */ | 651 | */ |
| 652 | q = (u_char *) keybuf; | 652 | q = (u_char *) keybuf; |
| 653 | while (q - (u_char *) keybuf - 8 && *key) | 653 | while (((q - (u_char *) keybuf) <= sizeof(keybuf)) && |
| 654 | *key) | ||
| 654 | *q++ ^= *key++ << 1; | 655 | *q++ ^= *key++ << 1; |
| 655 | 656 | ||
| 656 | if (des_setkey((u_char *) keybuf)) | 657 | if (des_setkey((u_char *) keybuf)) |
