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.
}
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;