@@ -4130,12 +4130,18 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void)
41304130 static const byte goodChar[] =
41314131 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
41324132 "abcdefghijklmnopqrstuvwxyz"
4133- "0123456789+/; ";
4133+ "0123456789+/";
41344134 static const byte charTest[] = "A+Gd\0\0\0";
41354135 static const byte oneByteTest[] = "YQ==";
41364136 static const byte twoByteTest[] = "YWE=";
41374137 static const byte threeByteTest[] = "YWFh";
41384138 static const byte fourByteTest[] = "YWFhYQ==";
4139+ static const byte trailingLFTest[] = "YWFhYQ==\n\n";
4140+ static const byte trailingSpaceTest[] = "YWFhYQ== ";
4141+ static const byte trailingCodesTest1[] = "YWFhY";
4142+ static const byte trailingCodesTest2[] = "YWFhYW";
4143+ static const byte trailingCodesTest3[] = "YWFhYWF";
4144+ static const byte trailingJunkTest[] = "YWFhYQ==X";
41394145 static const byte byteTestOutput[] = "aaaa";
41404146 int i;
41414147 WOLFSSL_ENTER("base64_test");
@@ -4255,6 +4261,26 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void)
42554261 N_BYTE_TEST(Base64_Decode, 3, threeByteTest);
42564262 N_BYTE_TEST(Base64_Decode, 4, fourByteTest);
42574263
4264+ #define N_BYTE_TRAILING_TEST(f, n, t, e) do { \
4265+ outLen = (n); \
4266+ ret = (f)(t, sizeof(t), out, &outLen); \
4267+ if (ret != (e)) \
4268+ return WC_TEST_RET_ENC_EC(ret); \
4269+ else if (ret == 0) { \
4270+ if (outLen != (n)) \
4271+ return WC_TEST_RET_ENC_I(outLen); \
4272+ if (XMEMCMP(out, byteTestOutput, n) != 0) \
4273+ return WC_TEST_RET_ENC_NC; \
4274+ } \
4275+ } while (0)
4276+
4277+ N_BYTE_TRAILING_TEST(Base64_Decode, 4, trailingLFTest, 0);
4278+ N_BYTE_TRAILING_TEST(Base64_Decode, 4, trailingSpaceTest, 0);
4279+ N_BYTE_TRAILING_TEST(Base64_Decode, 4, trailingCodesTest1, WC_NO_ERR_TRACE(ASN_INPUT_E));
4280+ N_BYTE_TRAILING_TEST(Base64_Decode, 4, trailingCodesTest2, WC_NO_ERR_TRACE(ASN_INPUT_E));
4281+ N_BYTE_TRAILING_TEST(Base64_Decode, 4, trailingCodesTest3, WC_NO_ERR_TRACE(ASN_INPUT_E));
4282+ N_BYTE_TRAILING_TEST(Base64_Decode, 4, trailingJunkTest, WC_NO_ERR_TRACE(ASN_INPUT_E));
4283+
42584284 /* Same tests again, using Base64_Decode_nonCT() */
42594285
42604286 /* Good Base64 encodings. */
@@ -4335,6 +4361,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void)
43354361 N_BYTE_TEST(Base64_Decode_nonCT, 3, threeByteTest);
43364362 N_BYTE_TEST(Base64_Decode_nonCT, 4, fourByteTest);
43374363
4364+ N_BYTE_TRAILING_TEST(Base64_Decode_nonCT, 4, trailingLFTest, 0);
4365+ N_BYTE_TRAILING_TEST(Base64_Decode_nonCT, 4, trailingSpaceTest, 0);
4366+ N_BYTE_TRAILING_TEST(Base64_Decode_nonCT, 4, trailingCodesTest1, WC_NO_ERR_TRACE(ASN_INPUT_E));
4367+ N_BYTE_TRAILING_TEST(Base64_Decode_nonCT, 4, trailingCodesTest2, WC_NO_ERR_TRACE(ASN_INPUT_E));
4368+ N_BYTE_TRAILING_TEST(Base64_Decode_nonCT, 4, trailingCodesTest3, WC_NO_ERR_TRACE(ASN_INPUT_E));
4369+ N_BYTE_TRAILING_TEST(Base64_Decode_nonCT, 4, trailingJunkTest, WC_NO_ERR_TRACE(ASN_INPUT_E));
4370+
43384371#ifdef WOLFSSL_BASE64_ENCODE
43394372 /* Decode and encode all symbols - non-alphanumeric. */
43404373 dataLen = sizeof(data);
0 commit comments