util/base64: check for dest buf size in last block

Just like the check for destination buffer size done previously for
complete data, it should also be done for the trailing data to avoid
goind out of bounds.
pull/9198/head
Shivani Bhardwaj 2 years ago committed by Victor Julien
parent 095c335c72
commit 0e8b451699

@ -159,7 +159,13 @@ Base64Ecode DecodeBase64(uint8_t *dest, uint32_t dest_size, const uint8_t *src,
if (bbidx > 0 && bbidx < 4 && ((!valid && mode == BASE64_MODE_RFC4648))) {
/* Decoded bytes for 1 or 2 base64 encoded bytes is 1 */
padding = bbidx > 1 ? B64_BLOCK - bbidx : 2;
*decoded_bytes += ASCII_BLOCK - padding;
uint32_t numDecoded_blk = ASCII_BLOCK - (padding < B64_BLOCK ? padding : ASCII_BLOCK);
if (dest_size < *decoded_bytes + numDecoded_blk) {
SCLogDebug("Destination buffer full");
ecode = BASE64_ECODE_BUF;
return ecode;
}
*decoded_bytes += numDecoded_blk;
DecodeBase64Block(dptr, b64);
*consumed_bytes += bbidx;
}

Loading…
Cancel
Save