@@ -2520,6 +2520,28 @@ static int test_wolfSSL_CTX_use_certificate_buffer(void)
25202520
25212521} /* END test_wolfSSL_CTX_use_certificate_buffer */
25222522
2523+ static int test_ProcessBuffer_negative_size(void)
2524+ {
2525+ EXPECT_DECLS;
2526+ #if !defined(NO_CERTS) && !defined(NO_TLS) && !defined(NO_WOLFSSL_SERVER) && \
2527+ defined(USE_CERT_BUFFERS_2048) && !defined(NO_RSA)
2528+ WOLFSSL_CTX* ctx = NULL;
2529+
2530+ ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_server_method()));
2531+
2532+ ExpectIntEQ(wolfSSL_CTX_use_certificate_buffer(ctx,
2533+ server_cert_der_2048, -1, WOLFSSL_FILETYPE_ASN1),
2534+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
2535+
2536+ ExpectIntEQ(wolfSSL_CTX_use_certificate_buffer(ctx,
2537+ server_cert_der_2048, sizeof_server_cert_der_2048,
2538+ WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS);
2539+
2540+ wolfSSL_CTX_free(ctx);
2541+ #endif
2542+ return EXPECT_RESULT();
2543+ }
2544+
25232545static int test_wolfSSL_use_certificate_buffer(void)
25242546{
25252547 EXPECT_DECLS;
@@ -10955,6 +10977,12 @@ static int test_wc_PemToDer(void)
1095510977
1095610978 XMEMSET(&info, 0, sizeof(info));
1095710979
10980+ {
10981+ const byte dummy = 'X';
10982+ ExpectIntEQ(wc_PemToDer(&dummy, -1, CERT_TYPE, &pDer, NULL,
10983+ &info, &eccKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG));
10984+ }
10985+
1095810986 ExpectIntEQ(ret = load_file(ca_cert, &cert_buf, &cert_sz), 0);
1095910987 ExpectIntEQ(ret = wc_PemToDer(cert_buf, (long int)cert_sz, CERT_TYPE, &pDer, NULL,
1096010988 &info, &eccKey), 0);
@@ -11128,6 +11156,10 @@ static int test_wc_KeyPemToDer(void)
1112811156 ExpectIntEQ(wc_KeyPemToDer(cert_buf, 0, (byte*)&cert_der, cert_sz, ""),
1112911157 WC_NO_ERR_TRACE(BAD_FUNC_ARG));
1113011158
11159+ /* Bad arg: NULL der buffer with negative pemSz (NULL-deref guard). */
11160+ ExpectIntEQ(wc_KeyPemToDer(cert_buf, -1, NULL, 0, ""),
11161+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
11162+
1113111163 /* Test normal operation */
1113211164 cert_dersz = cert_sz; /* DER will be smaller than PEM */
1113311165 ExpectNotNull(cert_der = (byte*)malloc((size_t)cert_dersz));
@@ -21883,6 +21915,13 @@ static int test_wc_SetIssueBuffer(void)
2188321915
2188421916 ExpectIntEQ(0, wc_SetIssuerBuffer(&forgedCert, peerCertBuf, peerCertSz));
2188521917
21918+ /* Negative-size rejection: pin both wc_SetIssuerBuffer and
21919+ * wc_SetSubjectBuffer (representatives for the seven wc_Set* siblings). */
21920+ ExpectIntEQ(wc_SetIssuerBuffer(&forgedCert, peerCertBuf, -1),
21921+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
21922+ ExpectIntEQ(wc_SetSubjectBuffer(&forgedCert, peerCertBuf, -1),
21923+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
21924+
2188621925 wolfSSL_FreeX509(x509);
2188721926#endif
2188821927 return EXPECT_RESULT();
@@ -26055,6 +26094,9 @@ static int test_wolfSSL_CTX_LoadCRL_largeCRLnum(void)
2605526094 WOLFSSL_SUCCESS);
2605626095 AssertIntEQ(XMEMCMP(
2605726096 crlInfo.crlNumber, exp_crlnum, XSTRLEN(exp_crlnum)), 0);
26097+ ExpectIntEQ(wolfSSL_CertManagerGetCRLInfo(
26098+ cm, &crlInfo, crlLrgCrlNumBuff, -1, WOLFSSL_FILETYPE_PEM),
26099+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
2605826100 /* Expect to fail loading CRL because of >21 octets CRL number */
2605926101 ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, crl_lrgcrlnum2,
2606026102 WOLFSSL_FILETYPE_PEM),
@@ -34975,6 +35017,7 @@ TEST_CASE testCases[] = {
3497535017 TEST_DECL(test_wolfSSL_CTX_use_certificate),
3497635018 TEST_DECL(test_wolfSSL_CTX_use_certificate_file),
3497735019 TEST_DECL(test_wolfSSL_CTX_use_certificate_buffer),
35020+ TEST_DECL(test_ProcessBuffer_negative_size),
3497835021 TEST_DECL(test_wolfSSL_use_certificate_buffer),
3497935022 TEST_DECL(test_wolfSSL_CTX_use_PrivateKey_file),
3498035023 TEST_DECL(test_wolfSSL_CTX_use_RSAPrivateKey_file),
0 commit comments