diff --git a/library/base64.c b/library/base64.c index edab35ec91..b7c2d16a5f 100644 --- a/library/base64.c +++ b/library/base64.c @@ -202,6 +202,7 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, size_t i; /* index in source */ size_t n; /* number of digits or trailing = in source */ uint32_t x; /* value accumulator */ + unsigned accumulated_digits = 0; unsigned equals = 0; int spaces_present = 0; unsigned char *p; @@ -270,7 +271,7 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, } equals = 0; - for( n = x = 0, p = dst; i > 0; i--, src++ ) + for( x = 0, p = dst; i > 0; i--, src++ ) { if( *src == '\r' || *src == '\n' || *src == ' ' ) continue; @@ -281,9 +282,9 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, else x |= dec_value( *src ); - if( ++n == 4 ) + if( ++accumulated_digits == 4 ) { - n = 0; + accumulated_digits = 0; *p++ = (unsigned char)( x >> 16 ); if( equals <= 1 ) *p++ = (unsigned char)( x >> 8 ); if( equals <= 0 ) *p++ = (unsigned char)( x );