]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
util/base64: fix padding bytes for trailing data
authorShivani Bhardwaj <shivani@oisf.net>
Thu, 30 Mar 2023 07:24:29 +0000 (12:54 +0530)
committerShivani Bhardwaj <shivanib134@gmail.com>
Tue, 25 Jul 2023 14:59:04 +0000 (20:29 +0530)
Padding bytes for the last remainder data should be as follows:

Case   |    Remainder bytes     |    Padding
----------------------------------------------
  I    |              1         |      3
  II   |              2         |      2
  III  |              3         |      1

However, we calculate the decoded_bytes with the formula:
decoded_bytes = ASCII_BLOCK - padding

this means for Case I when padding is 3 bytes, the decoded_bytes would
be 0. This is incorrect for any trailing data. In any of the above
cases, if the parsing was successful, there should at least be 1 decoded
byte.

(cherry picked from commit 095c335c72befec2cfcd43390f86d116926bcd17)

src/util-base64.c

index ab9ed6d8b693c71d5e7ee7f5c86532867ab2eadb..1c99dc636724cdd5ca93ef87328ce25a9b1aa87e 100644 (file)
@@ -156,7 +156,8 @@ Base64Ecode DecodeBase64(uint8_t *dest, uint32_t dest_size, const uint8_t *src,
     }
 
     if (bbidx > 0 && bbidx < 4 && ((!valid && mode == BASE64_MODE_RFC4648))) {
-        padding = B64_BLOCK - bbidx;
+        /* Decoded bytes for 1 or 2 base64 encoded bytes is 1 */
+        padding = bbidx > 1 ? B64_BLOCK - bbidx : 2;
         *decoded_bytes += ASCII_BLOCK - padding;
         DecodeBase64Block(dptr, b64);
         *consumed_bytes += bbidx;