]> 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 07:38:22 +0000 (09:38 +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.

src/util-decode-mime.c

index 0f47cd16a409da688200b6946b706cac68a9aca6..0187d6b753ff36f6e9fdd3a448a75eeb2f5f5719 100644 (file)
@@ -1226,6 +1226,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) {