]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
mime/base64: fix final data not getting processed
authorVictor Julien <vjulien@oisf.net>
Mon, 27 Jun 2022 14:20:02 +0000 (16:20 +0200)
committerVictor Julien <vjulien@oisf.net>
Wed, 29 Jun 2022 20:57:40 +0000 (22:57 +0200)
If the last data of the body was not a multple of 4 and not padded
to be a multiple of 4, it would not be processed.

(cherry picked from commit 0d6ab727c55cbda04404ec44c5aa6582f3922478)

src/util-decode-mime.c

index 12be127e455b49b87ce7d767e3cea7de35d561e3..0586eda47f405f5d700ac36e14673ade7f923811 100644 (file)
@@ -1236,6 +1236,14 @@ static uint8_t ProcessBase64Remainder(
         state->bvr_len = cnt;
     }
 
+    /* in force mode pad the block */
+    if (force && cnt != B64_BLOCK) {
+        SCLogDebug("force and cnt %u != %u", cnt, B64_BLOCK);
+        for (uint8_t i = state->bvr_len; i < B64_BLOCK; i++) {
+            state->bvremain[state->bvr_len++] = '=';
+        }
+    }
+
     /* If data chunk buffer will be full, then clear it now */
     if (DATA_CHUNK_SIZE - state->data_chunk_len < ASCII_BLOCK) {