@ -70,17 +70,17 @@ int av_base64_decode(uint8_t * out, const char *in, int out_length)
* fixed edge cases and made it work from data ( vs . strings ) by ryan .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * av_base64_encode ( uint8_t * src , int len )
char * av_base64_encode ( char * out , int out_len , uint8_t * src , int len )
{
static const char b64 [ ] =
" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ " ;
char * ret , * dst ;
char * dst ;
unsigned i_bits = 0 ;
int i_shift = 0 ;
int bytes_remaining = len ;
if ( len < UINT_MAX / 4 ) {
ret = dst = av_malloc ( len * 4 / 3 + 12 ) ;
if ( len < UINT_MAX / 4 & & out_len > ( len * 4 / 3 + 12 ) & & out ) {
dst = out ;
} else
return NULL ;
@ -95,12 +95,12 @@ char *av_base64_encode(uint8_t * src, int len)
i_shift - = 6 ;
} while ( i_shift > 6 | | ( bytes_remaining = = 0 & & i_shift > 0 ) ) ;
}
while ( ( dst - re t) & 3 )
while ( ( dst - ou t) & 3 )
* dst + + = ' = ' ;
}
* dst = ' \0 ' ;
return re t;
return ou t;
}
// #define TEST_BASE64
@ -131,10 +131,12 @@ int b64test()
} ;
for ( t = tests ; t - > data ; t + + ) {
char * str ;
int ret ;
av_log ( NULL , AV_LOG_ERROR , " Encoding %s... \n " , ( char * ) t - > data ) ;
str = av_base64_encode ( t - > data , t - > len ) ;
if ( str ) {
str = av_malloc ( t - > len * 4 / 3 + 12 ) ;
ret = av_base64_encode ( str , t - > len * 4 / 3 + 12 , t - > data , t - > len ) ;
if ( ret > 0 ) {
av_log ( NULL , AV_LOG_ERROR , " Encoded to %s... \n " , str ) ;
if ( strcmp ( str , t - > result ) ! = 0 ) {
av_log ( NULL , AV_LOG_ERROR , " failed test %d: %s != %s \n " ,
@ -168,9 +170,9 @@ int b64test()
srand ( 123141 ) ; // time(NULL));
for ( test_count = 0 ; test_count < 100 ; test_count + + ) {
int size = rand ( ) % 1024 ;
int ii ;
int ii , ret ;
uint8_t * data ;
char * encoded_result ;
char * encoded_result = av_malloc ( size * 4 / 3 + 12 ) ;
av_log ( NULL , AV_LOG_ERROR , " Test %d: Size %d bytes... " ,
test_count , size ) ;
@ -179,8 +181,9 @@ int b64test()
data [ ii ] = rand ( ) % 255 ;
}
encoded_result = av_base64_encode ( data , size ) ;
if ( encoded_result ) {
ret = av_base64_encode ( encoded_result , size * 4 / 3 + 12 ,
data , size ) ;
if ( ret > 0 ) {
int decode_buffer_size = size + 10 ; // try without 10 as well
uint8_t * decode_buffer = av_malloc ( decode_buffer_size ) ;
if ( decode_buffer ) {