Mercurial > dovecot > original-hg > dovecot-1.2
changeset 564:24f2776422c0 HEAD
Changed base64_decode() to separate src/dest buffers.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 03 Nov 2002 07:34:46 +0200 |
parents | 796c12593140 |
children | 41c43eb65c18 |
files | src/lib/base64.c src/lib/base64.h src/login/client-authenticate.c |
diffstat | 3 files changed, 15 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/base64.c Sun Nov 03 02:09:33 2002 +0200 +++ b/src/lib/base64.c Sun Nov 03 07:34:46 2002 +0200 @@ -100,46 +100,46 @@ }; #define CHAR64(c) (index_64[(int)(unsigned char)(c)]) -ssize_t base64_decode(char *data) +ssize_t base64_decode(const char *src, unsigned char *dest) { - char *p, *start; + unsigned char *p; int c1, c2, c3, c4; - p = start = data; - while (*data != '\0') { - c1 = *data++; + p = dest; + while (*src != '\0') { + c1 = *src++; if (CHAR64(c1) == XX) return -1; - c2 = *data++; + c2 = *src++; if (CHAR64(c2) == XX) return -1; - c3 = *data++; + c3 = *src++; if (c3 != '=' && CHAR64(c3) == XX) return -1; - c4 = *data++; + c4 = *src++; if (c4 != '=' && CHAR64(c4) == XX) return -1; *p++ = ((CHAR64(c1) << 2) | ((CHAR64(c2) & 0x30) >> 4)); if (c3 == '=') { - if (*data != '\0' || c4 != '=') + if (*src != '\0' || c4 != '=') return -1; break; } *p++ = (((CHAR64(c2) & 0xf) << 4) | ((CHAR64(c3) & 0x3c) >> 2)); if (c4 == '=') { - if (*data != '\0') + if (*src != '\0') return -1; break; } *p++ = (((CHAR64(c3) & 0x3) << 6) | CHAR64(c4)); } - return (ssize_t) (p-start); + return (ssize_t) (p-dest); }
--- a/src/lib/base64.h Sun Nov 03 02:09:33 2002 +0200 +++ b/src/lib/base64.h Sun Nov 03 07:34:46 2002 +0200 @@ -4,8 +4,8 @@ /* Translates binary data into base64. Allocates memory from data stack. */ const char *base64_encode(const unsigned char *data, size_t size); -/* Translates base64 data into binary modifying the data itself. - Returns size of the binary data, or -1 if error occured. */ -ssize_t base64_decode(char *data); +/* Translates base64 data into binary. dest must be large enough, and may be + same as src. Returns size of the binary data, or -1 if error occured. */ +ssize_t base64_decode(const char *src, unsigned char *dest); #endif
--- a/src/login/client-authenticate.c Sun Nov 03 02:09:33 2002 +0200 +++ b/src/login/client-authenticate.c Sun Nov 03 07:34:46 2002 +0200 @@ -250,7 +250,7 @@ return; } - size = base64_decode(line); + size = base64_decode(line, (unsigned char *) line); if (size < 0) { /* failed */ client_auth_abort(client, "NO Invalid base64 data");