avoid zero length array in base64_decode

This commit is contained in:
Matt Johnston 2020-06-10 23:26:05 +08:00
parent 4b305c5721
commit d14ebdbf0e

View File

@ -43,8 +43,8 @@ static const unsigned char map_base64[256] = {
255, 255, 255, 255 }; 255, 255, 255, 255 };
#endif /* LTC_BASE64 */ #endif /* LTC_BASE64 */
static const unsigned char map_base64url[] = {
#if defined(LTC_BASE64_URL) #if defined(LTC_BASE64_URL)
static const unsigned char map_base64url[] = {
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
@ -67,8 +67,8 @@ static const unsigned char map_base64url[] = {
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255 255, 255, 255, 255
#endif /* LTC_BASE64_URL */
}; };
#endif /* LTC_BASE64_URL */
enum { enum {
relaxed = 0, relaxed = 0,
@ -117,8 +117,14 @@ static int _base64_decode_internal(const unsigned char *in, unsigned long inlen
} }
if (y != 0) { if (y != 0) {
int allow_b64url = 0;
#ifdef LTC_BASE64_URL
if (map == map_base64url) {
allow_b64url = 1;
}
#endif
if (y == 1) return CRYPT_INVALID_PACKET; if (y == 1) return CRYPT_INVALID_PACKET;
if ((y + g) != 4 && is_strict && map != map_base64url) return CRYPT_INVALID_PACKET; if ((y + g) != 4 && is_strict && !allow_b64url) return CRYPT_INVALID_PACKET;
t = t << (6 * (4 - y)); t = t << (6 * (4 - y));
if (z + y - 1 > *outlen) return CRYPT_BUFFER_OVERFLOW; if (z + y - 1 > *outlen) return CRYPT_BUFFER_OVERFLOW;
if (y >= 2) out[z++] = (unsigned char) ((t >> 16) & 255); if (y >= 2) out[z++] = (unsigned char) ((t >> 16) & 255);