Fix potential overflow in base64_encode
diff --git a/library/base64.c b/library/base64.c
index dba4c23..c492cc0 100644
--- a/library/base64.c
+++ b/library/base64.c
@@ -77,15 +77,16 @@
return( 0 );
}
- n = (slen << 3) / 6;
+ n = slen / 3 + ( slen % 3 != 0 );
- switch( (slen << 3) - (n * 6) )
+ if( n > ( SIZE_T_MAX - 1 ) / 4 )
{
- case 2: n += 3; break;
- case 4: n += 2; break;
- default: break;
+ *dlen = SIZE_T_MAX;
+ return( POLARSSL_ERR_BASE64_BUFFER_TOO_SMALL );
}
+ n *= 4;
+
if( *dlen < n + 1 )
{
*dlen = n + 1;