@@ -21339,11 +21339,9 @@ static int CheckCertSignature_ex(const byte* cert, word32 certSz, void* heap,
2133921339 ret = BAD_FUNC_ARG;
2134021340 }
2134121341
21342- ALLOC_ASNGETDATA (dataASN, x509CertASN_Length, ret, heap);
21342+ CALLOC_ASNGETDATA (dataASN, x509CertASN_Length, ret, heap);
2134321343
2134421344 if ((ret == 0) && (!req)) {
21345- /* Clear dynamic data for certificate items. */
21346- XMEMSET(dataASN, 0, sizeof(ASNGetData) * x509CertASN_Length);
2134721345 /* Set OID types expected for signature and public key. */
2134821346 GetASN_OID(&dataASN[X509CERTASN_IDX_TBS_ALGOID_OID], oidSigType);
2134921347 GetASN_OID(&dataASN[X509CERTASN_IDX_TBS_SPUBKEYINFO_ALGO_OID],
@@ -21406,8 +21404,6 @@ static int CheckCertSignature_ex(const byte* cert, word32 certSz, void* heap,
2140621404#ifndef WOLFSSL_CERT_REQ
2140721405 ret = NOT_COMPILED_IN;
2140821406#else
21409- /* Clear dynamic data for certificate request items. */
21410- XMEMSET(dataASN, 0, sizeof(ASNGetData) * certReqASN_Length);
2141121407 /* Set OID types expected for signature and public key. */
2141221408 GetASN_OID(&dataASN[CERTREQASN_IDX_INFO_SPUBKEYINFO_ALGOID_OID],
2141321409 oidKeyType);
@@ -21417,6 +21413,7 @@ static int CheckCertSignature_ex(const byte* cert, word32 certSz, void* heap,
2141721413 /* Parse certificate request. */
2141821414 ret = GetASN_Items(certReqASN, dataASN, certReqASN_Length, 1, cert,
2141921415 &idx, certSz);
21416+
2142021417 if (ret == 0) {
2142121418 /* Store the data for verification in the certificate. */
2142221419 tbs = GetASNItem_Addr(dataASN[CERTREQASN_IDX_INFO_SEQ], cert);
@@ -21427,11 +21424,14 @@ static int CheckCertSignature_ex(const byte* cert, word32 certSz, void* heap,
2142721424 dataASN[CERTREQASN_IDX_INFO_SUBJ_SEQ], cert);
2142821425 sigOID = dataASN[CERTREQASN_IDX_INFO_SIGALGO_OID].data.oid.sum;
2142921426 #ifdef WC_RSA_PSS
21430- sigParams = GetASNItem_Addr(dataASN[X509CERTASN_IDX_SIGALGO_PARAMS],
21431- cert);
21432- sigParamsSz =
21433- GetASNItem_Length(dataASN[X509CERTASN_IDX_SIGALGO_PARAMS],
21434- cert);
21427+ if (GetASNItem_HaveData(dataASN[X509CERTASN_IDX_SIGALGO_PARAMS])) {
21428+ sigParams =
21429+ GetASNItem_Addr(dataASN[X509CERTASN_IDX_SIGALGO_PARAMS],
21430+ cert);
21431+ sigParamsSz =
21432+ GetASNItem_Length(dataASN[X509CERTASN_IDX_SIGALGO_PARAMS],
21433+ cert);
21434+ }
2143521435 #endif
2143621436 GetASN_GetConstRef(&dataASN[CERTREQASN_IDX_INFO_SIGNATURE], &sig,
2143721437 &sigSz);
@@ -34360,7 +34360,7 @@ int ParseCRL(RevokedCert* rcert, DecodedCRL* dcrl, const byte* buff, word32 sz,
3436034360 GetASNItem_DataIdx(dataASN[CRLASN_IDX_TBS_REVOKEDCERTS], buff),
3436134361 GetASNItem_EndIdx(dataASN[CRLASN_IDX_TBS_REVOKEDCERTS], buff));
3436234362 }
34363- if (ret == 0) {
34363+ if (( ret == 0) && GetASNItem_HaveIdx(dataASN[CRLASN_IDX_TBS_EXT_SEQ]) ) {
3436434364 /* Parse the extensions - starting after SEQUENCE OF. */
3436534365 ret = ParseCRL_Extensions(dcrl, buff,
3436634366 GetASNItem_DataIdx(dataASN[CRLASN_IDX_TBS_EXT_SEQ], buff),
0 commit comments