mirror of
https://github.com/clearml/dropbear
synced 2025-03-15 16:11:55 +00:00
avoid zero length array in base64_decode
This commit is contained in:
parent
4b305c5721
commit
d14ebdbf0e
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user