]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
util/base64: check for dest buf size in last block
authorShivani Bhardwaj <shivani@oisf.net>
Thu, 30 Mar 2023 07:41:12 +0000 (13:11 +0530)
committerVictor Julien <vjulien@oisf.net>
Mon, 10 Jul 2023 07:27:01 +0000 (09:27 +0200)
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.

src/util-base64.c

index b8434a564a12644ec98cf8e298c89229dc71e7be..c9831ddca17f66af6f7889cce11abaf39ccbfee2 100644 (file)
@@ -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;
     }