Mercurial > dovecot > original-hg > dovecot-1.2
changeset 565:41c43eb65c18 HEAD
size parameter to base64_decode()..
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 03 Nov 2002 10:03:05 +0200 |
parents | 24f2776422c0 |
children | a75b7a269674 |
files | src/lib/base64.c src/login/client-authenticate.c |
diffstat | 2 files changed, 7 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/base64.c Sun Nov 03 07:34:46 2002 +0200 +++ b/src/lib/base64.c Sun Nov 03 10:03:05 2002 +0200 @@ -100,13 +100,13 @@ }; #define CHAR64(c) (index_64[(int)(unsigned char)(c)]) -ssize_t base64_decode(const char *src, unsigned char *dest) +ssize_t base64_decode(const char *src, size_t size, unsigned char *dest) { unsigned char *p; int c1, c2, c3, c4; p = dest; - while (*src != '\0') { + while (size >= 4) { c1 = *src++; if (CHAR64(c1) == XX) @@ -124,17 +124,19 @@ if (c4 != '=' && CHAR64(c4) == XX) return -1; + size -= 4; + *p++ = ((CHAR64(c1) << 2) | ((CHAR64(c2) & 0x30) >> 4)); if (c3 == '=') { - if (*src != '\0' || c4 != '=') + if (size != 0 || c4 != '=') return -1; break; } *p++ = (((CHAR64(c2) & 0xf) << 4) | ((CHAR64(c3) & 0x3c) >> 2)); if (c4 == '=') { - if (*src != '\0') + if (size != 0) return -1; break; }
--- a/src/login/client-authenticate.c Sun Nov 03 07:34:46 2002 +0200 +++ b/src/login/client-authenticate.c Sun Nov 03 10:03:05 2002 +0200 @@ -250,7 +250,7 @@ return; } - size = base64_decode(line, (unsigned char *) line); + size = base64_decode(line, strlen(line), (unsigned char *) line); if (size < 0) { /* failed */ client_auth_abort(client, "NO Invalid base64 data");