From 64f018048c04f47d61c05a4ccfeb78755d2705cd Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Wed, 30 Aug 2006 17:27:38 +0000 Subject: [PATCH] *Really* fix base 64 encoding --- include/vlc_url.h | 7 ++++--- src/test/url.c | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/vlc_url.h b/include/vlc_url.h index 85a8a84c0a..d7e40d06d5 100644 --- a/include/vlc_url.h +++ b/include/vlc_url.h @@ -222,6 +222,7 @@ static inline char *vlc_b64_encode( const char *src ) static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; size_t len = strlen( src ); + const uint8_t *in = (const uint8_t *)src; char *ret; char *dst = (char *)malloc( ( len + 4 ) * 4 / 3 ); @@ -233,17 +234,17 @@ static inline char *vlc_b64_encode( const char *src ) while( len > 0 ) { /* pops (up to) 3 bytes of input, push 4 bytes */ - uint32_t v = *src++ << 24; // 1/3 + uint32_t v = *in++ << 24; // 1/3 *dst++ = b64[v >> 26]; // 1/4 v = v << 6; if( len >= 2 ) - v |= *src++ << 16; // 2/3 + v |= *in++ << 22; // 2/3 *dst++ = b64[v >> 26]; // 2/4 v = v << 6; if( len >= 3 ) - v |= *src++ << 8; // 3/3 + v |= *in++ << 20; // 3/3 *dst++ = ( len >= 2 ) ? b64[v >> 26] : '='; // 3/4 v = v << 6; diff --git a/src/test/url.c b/src/test/url.c index b1accf1a9c..df8961704d 100644 --- a/src/test/url.c +++ b/src/test/url.c @@ -82,9 +82,9 @@ int main (void) /* Base 64 tests */ test_b64 ("", ""); test_b64 ("d", "ZA=="); - test_b64 ("ab", "YQG="); - test_b64 ("abc", "YQGI"); - test_b64 ("abcd", "YQGIZA=="); + test_b64 ("ab", "YWI="); + test_b64 ("abc", "YWJj"); + test_b64 ("abcd", "YWJjZA=="); return 0; } -- 2.39.5