changeset 17778:37bfcf89c89c

Fix base64 encoding for basic auth according to RFC. Patch by Jeff D'Angelo (jcd+mplayer at psu edu).
author reimar
date Wed, 08 Mar 2006 15:14:08 +0000
parents 13b2332c5154
children 031185213fa9
files libmpdemux/http.c
diffstat 1 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/http.c	Wed Mar 08 15:07:48 2006 +0000
+++ b/libmpdemux/http.c	Wed Mar 08 15:14:08 2006 +0000
@@ -659,7 +659,7 @@
 
 int 
 base64_encode(const void *enc, int encLen, char *out, int outMax) {
-	static const char	b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
+	static const char	b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
 	unsigned char		*encBuf;
 	int			outLen;
@@ -670,6 +670,7 @@
 	outLen = 0;
 	bits = 0;
 	shift = 0;
+	outMax &= ~3;
 
 	while( outLen<outMax ) {
 		if( encLen>0 ) {
@@ -685,9 +686,12 @@
 			bits <<= 6 - shift;
 			shift = 6;
 		} else {
-			// Terminate with Mime style '='
-			*out = '=';
-			outLen++;
+			// As per RFC 2045, section 6.8,
+			// pad output as necessary: 0 to 2 '=' chars.
+			while( outLen & 3 ){
+				*out++ = '=';
+				outLen++;
+			}
 
 			return outLen;
 		}