[dovecot-cvs] dovecot/src/lib base64.c,1.4,1.5

cras at procontrol.fi cras at procontrol.fi
Sun Nov 3 10:03:07 EET 2002


Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv23837/lib

Modified Files:
	base64.c 
Log Message:
size parameter to base64_decode()..



Index: base64.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/base64.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- base64.c	3 Nov 2002 05:34:46 -0000	1.4
+++ base64.c	3 Nov 2002 08:03:05 -0000	1.5
@@ -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;
 		}




More information about the dovecot-cvs mailing list