@@ -87,6 +87,13 @@ int InitCRL(WOLFSSL_CRL* crl, WOLFSSL_CERT_MANAGER* cm)
8787 WOLFSSL_MSG ("Init Mutex failed" );
8888 return BAD_MUTEX_E ;
8989 }
90+ #ifdef OPENSSL_ALL
91+ {
92+ int ret ;
93+ wolfSSL_RefInit (& crl -> ref , & ret );
94+ (void )ret ;
95+ }
96+ #endif
9097
9198 return 0 ;
9299}
@@ -213,7 +220,7 @@ static void CRL_Entry_free(CRL_Entry* crle, void* heap)
213220
214221 WOLFSSL_ENTER ("FreeCRL_Entry" );
215222
216- while (tmp ) {
223+ while (tmp != NULL ) {
217224 next = tmp -> next ;
218225 XFREE (tmp , heap , DYNAMIC_TYPE_REVOKED );
219226 tmp = next ;
@@ -241,11 +248,24 @@ void FreeCRL(WOLFSSL_CRL* crl, int dynamic)
241248{
242249 CRL_Entry * tmp ;
243250
251+ WOLFSSL_ENTER ("FreeCRL" );
252+
244253 if (crl == NULL )
245254 return ;
246255
256+ #ifdef OPENSSL_ALL
257+ {
258+ int ret ;
259+ int doFree = 0 ;
260+ wolfSSL_RefDec (& crl -> ref , & doFree , & ret );
261+ if (ret != 0 )
262+ WOLFSSL_MSG ("Couldn't lock x509 mutex" );
263+ if (!doFree )
264+ return ;
265+ }
266+ #endif
267+
247268 tmp = crl -> crlList ;
248- WOLFSSL_ENTER ("FreeCRL" );
249269#ifdef HAVE_CRL_MONITOR
250270 if (crl -> monitors [0 ].path )
251271 XFREE (crl -> monitors [0 ].path , crl -> heap , DYNAMIC_TYPE_CRL_MONITOR );
@@ -916,9 +936,17 @@ static CRL_Entry* DupCRL_Entry(const CRL_Entry* ent, void* heap)
916936
917937#ifndef CRL_STATIC_REVOKED_LIST
918938 dupl -> certs = DupRevokedCertList (ent -> certs , heap );
939+ if (ent -> certs != NULL && dupl -> certs == NULL ) {
940+ CRL_Entry_free (dupl , heap );
941+ return NULL ;
942+ }
919943#endif
920944#ifdef OPENSSL_EXTRA
921945 dupl -> issuer = wolfSSL_X509_NAME_dup (ent -> issuer );
946+ if (ent -> issuer != NULL && dupl -> issuer == NULL ) {
947+ CRL_Entry_free (dupl , heap );
948+ return NULL ;
949+ }
922950#endif
923951
924952 if (!ent -> verified ) {
@@ -1035,6 +1063,8 @@ static int DupX509_CRL(WOLFSSL_X509_CRL *dupl, const WOLFSSL_X509_CRL* crl)
10351063#endif
10361064
10371065 dupl -> crlList = DupCRL_list (crl -> crlList , dupl -> heap );
1066+ if (dupl -> crlList == NULL )
1067+ return MEMORY_E ;
10381068#ifdef HAVE_CRL_IO
10391069 dupl -> crlIOCb = crl -> crlIOCb ;
10401070#endif
0 commit comments