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");