@@ -31518,6 +31518,58 @@ static int test_wolfSSL_CTX_LoadCRL(void)
3151831518 return EXPECT_RESULT();
3151931519}
3152031520
31521+ static int test_wolfSSL_CTX_LoadCRL_largeCRLnum(void)
31522+ {
31523+ EXPECT_DECLS;
31524+ #if defined(HAVE_CRL) && !defined(NO_RSA) && !defined(NO_FILESYSTEM) && \
31525+ defined(HAVE_CRL_UPDATE_CB)
31526+ WOLFSSL_CERT_MANAGER* cm = NULL;
31527+ const char* caCert = "./certs/ca-cert.pem";
31528+ const char* crl_lrgcrlnum = "./certs/crl/extra-crls/large_crlnum.pem";
31529+ const char* crl_lrgcrlnum2 = "./certs/crl/extra-crls/large_crlnum2.pem";
31530+ const char* exp_crlnum = "D8AFADA7F08B38E6178BD0E5CD7B0DF80071BA74";
31531+ byte *crlLrgCrlNumBuff = NULL;
31532+ word32 crlLrgCrlNumSz;
31533+ CrlInfo crlInfo;
31534+ XFILE f;
31535+ word32 sz;
31536+
31537+ cm = wolfSSL_CertManagerNew();
31538+ ExpectNotNull(cm);
31539+ ExpectIntEQ(wolfSSL_CertManagerLoadCA(cm, caCert, NULL),
31540+ WOLFSSL_SUCCESS);
31541+ ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, crl_lrgcrlnum,
31542+ WOLFSSL_FILETYPE_PEM),
31543+ WOLFSSL_SUCCESS);
31544+
31545+ AssertTrue((f = XFOPEN(crl_lrgcrlnum, "rb")) != XBADFILE);
31546+ AssertTrue(XFSEEK(f, 0, XSEEK_END) == 0);
31547+ AssertIntGE(sz = (word32) XFTELL(f), 1);
31548+ AssertTrue(XFSEEK(f, 0, XSEEK_SET) == 0);
31549+ AssertTrue( \
31550+ (crlLrgCrlNumBuff =
31551+ (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE)) != NULL);
31552+ AssertTrue(XFREAD(crlLrgCrlNumBuff, 1, sz, f) == sz);
31553+ XFCLOSE(f);
31554+ crlLrgCrlNumSz = sz;
31555+
31556+ AssertIntEQ(wolfSSL_CertManagerGetCRLInfo(
31557+ cm, &crlInfo, crlLrgCrlNumBuff, crlLrgCrlNumSz, WOLFSSL_FILETYPE_PEM),
31558+ WOLFSSL_SUCCESS);
31559+ AssertIntEQ(XMEMCMP(
31560+ crlInfo.crlNumber, exp_crlnum, XSTRLEN(exp_crlnum)), 0);
31561+ /* Expect to fail loading CRL because of >21 octets CRL number */
31562+ ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, crl_lrgcrlnum2,
31563+ WOLFSSL_FILETYPE_PEM),
31564+ ASN_PARSE_E);
31565+
31566+ XFREE(crlLrgCrlNumBuff, NULL, DYNAMIC_TYPE_FILE);
31567+ wolfSSL_CertManagerFree(cm);
31568+ #endif
31569+ return EXPECT_RESULT();
31570+
31571+ }
31572+
3152131573#if defined(HAVE_CRL) && !defined(NO_RSA) && !defined(NO_FILESYSTEM) && \
3152231574 defined(HAVE_CRL_UPDATE_CB)
3152331575int crlUpdateTestStatus = 0;
@@ -31575,7 +31627,7 @@ static void updateCrlCb(CrlInfo* old, CrlInfo* cnew)
3157531627 AssertIntEQ(crl1Info.nextDateMaxLen, old->nextDateMaxLen);
3157631628 AssertIntEQ(crl1Info.nextDateFormat, old->nextDateFormat);
3157731629 AssertIntEQ(XMEMCMP(
31578- crl1Info.crlNumber, old->crlNumber, CRL_MAX_NUM_SZ ), 0);
31630+ crl1Info.crlNumber, old->crlNumber, sizeof(old->crlNumber) ), 0);
3157931631 AssertIntEQ(XMEMCMP(
3158031632 crl1Info.issuerHash, old->issuerHash, old->issuerHashLen), 0);
3158131633 AssertIntEQ(XMEMCMP(
@@ -31590,7 +31642,7 @@ static void updateCrlCb(CrlInfo* old, CrlInfo* cnew)
3159031642 AssertIntEQ(crlRevInfo.nextDateMaxLen, cnew->nextDateMaxLen);
3159131643 AssertIntEQ(crlRevInfo.nextDateFormat, cnew->nextDateFormat);
3159231644 AssertIntEQ(XMEMCMP(
31593- crlRevInfo.crlNumber, cnew->crlNumber, CRL_MAX_NUM_SZ ), 0);
31645+ crlRevInfo.crlNumber, cnew->crlNumber, sizeof(cnew->crlNumber) ), 0);
3159431646 AssertIntEQ(XMEMCMP(
3159531647 crlRevInfo.issuerHash, cnew->issuerHash, cnew->issuerHashLen), 0);
3159631648 AssertIntEQ(XMEMCMP(
@@ -42089,6 +42141,7 @@ TEST_CASE testCases[] = {
4208942141 TEST_DECL(test_wolfSSL_use_certificate_chain_file),
4209042142 TEST_DECL(test_wolfSSL_CTX_trust_peer_cert),
4209142143 TEST_DECL(test_wolfSSL_CTX_LoadCRL),
42144+ TEST_DECL(test_wolfSSL_CTX_LoadCRL_largeCRLnum),
4209242145 TEST_DECL(test_wolfSSL_crl_update_cb),
4209342146 TEST_DECL(test_wolfSSL_CTX_SetTmpDH_file),
4209442147 TEST_DECL(test_wolfSSL_CTX_SetTmpDH_buffer),
0 commit comments