@@ -3593,7 +3593,7 @@ WOLFSSL_X509* wolfSSL_d2i_X509(WOLFSSL_X509** x509, const unsigned char** in,
35933593}
35943594
35953595static WOLFSSL_X509 * d2i_X509orX509REQ (WOLFSSL_X509 * * x509 ,
3596- const byte * in , int len , int req )
3596+ const byte * in , int len , int req , void * heap )
35973597{
35983598 WOLFSSL_X509 * newX509 = NULL ;
35993599 int type = req ? CERTREQ_TYPE : CERT_TYPE ;
@@ -3620,12 +3620,12 @@ static WOLFSSL_X509* d2i_X509orX509REQ(WOLFSSL_X509** x509,
36203620 return NULL ;
36213621 #endif
36223622
3623- InitDecodedCert (cert , (byte * )in , len , NULL );
3623+ InitDecodedCert (cert , (byte * )in , len , heap );
36243624 #ifdef WOLFSSL_CERT_REQ
36253625 cert -> isCSR = (byte )req ;
36263626 #endif
36273627 if (ParseCertRelative (cert , type , 0 , NULL ) == 0 ) {
3628- newX509 = wolfSSL_X509_new ( );
3628+ newX509 = wolfSSL_X509_new_ex ( heap );
36293629 if (newX509 != NULL ) {
36303630 if (CopyDecodedToX509 (newX509 , cert ) != 0 ) {
36313631 wolfSSL_X509_free (newX509 );
@@ -3659,16 +3659,22 @@ int wolfSSL_X509_get_isCA(WOLFSSL_X509* x509)
36593659 return isCA ;
36603660}
36613661
3662+ WOLFSSL_X509 * wolfSSL_X509_d2i_ex (WOLFSSL_X509 * * x509 , const byte * in , int len ,
3663+ void * heap )
3664+ {
3665+ return d2i_X509orX509REQ (x509 , in , len , 0 , heap );
3666+ }
3667+
36623668WOLFSSL_X509 * wolfSSL_X509_d2i (WOLFSSL_X509 * * x509 , const byte * in , int len )
36633669{
3664- return d2i_X509orX509REQ (x509 , in , len , 0 );
3670+ return wolfSSL_X509_d2i_ex (x509 , in , len , NULL );
36653671}
36663672
36673673#ifdef WOLFSSL_CERT_REQ
36683674WOLFSSL_X509 * wolfSSL_X509_REQ_d2i (WOLFSSL_X509 * * x509 ,
36693675 const unsigned char * in , int len )
36703676{
3671- return d2i_X509orX509REQ (x509 , in , len , 1 );
3677+ return d2i_X509orX509REQ (x509 , in , len , 1 , NULL );
36723678}
36733679#endif
36743680
@@ -5319,19 +5325,24 @@ WOLFSSL_X509* wolfSSL_X509_REQ_load_certificate_buffer(
53195325/* returns a pointer to a new WOLFSSL_X509 structure on success and NULL on
53205326 * fail
53215327 */
5322- WOLFSSL_X509 * wolfSSL_X509_new (void )
5328+ WOLFSSL_X509 * wolfSSL_X509_new_ex (void * heap )
53235329{
53245330 WOLFSSL_X509 * x509 ;
53255331
5326- x509 = (WOLFSSL_X509 * )XMALLOC (sizeof (WOLFSSL_X509 ), NULL ,
5332+ x509 = (WOLFSSL_X509 * )XMALLOC (sizeof (WOLFSSL_X509 ), heap ,
53275333 DYNAMIC_TYPE_X509 );
53285334 if (x509 != NULL ) {
5329- InitX509 (x509 , 1 , NULL );
5335+ InitX509 (x509 , 1 , heap );
53305336 }
53315337
53325338 return x509 ;
53335339}
53345340
5341+ WOLFSSL_X509 * wolfSSL_X509_new (void )
5342+ {
5343+ return wolfSSL_X509_new_ex (NULL );
5344+ }
5345+
53355346WOLFSSL_ABI
53365347WOLFSSL_X509_NAME * wolfSSL_X509_get_subject_name (WOLFSSL_X509 * cert )
53375348{
@@ -7610,7 +7621,7 @@ static WOLFSSL_X509* d2i_X509orX509REQ_bio(WOLFSSL_BIO* bio,
76107621#endif
76117622 }
76127623 else {
7613- localX509 = wolfSSL_X509_d2i (NULL , mem , size );
7624+ localX509 = wolfSSL_X509_d2i_ex (NULL , mem , size , bio -> heap );
76147625 }
76157626 if (localX509 == NULL ) {
76167627 WOLFSSL_MSG ("wolfSSL_X509_d2i error" );
@@ -13353,7 +13364,7 @@ static int x509GetIssuerFromCM(WOLFSSL_X509 **issuer, WOLFSSL_CERT_MANAGER* cm,
1335313364#endif
1335413365
1335513366 /* Use existing CA retrieval APIs that use DecodedCert. */
13356- InitDecodedCert (cert , x -> derCert -> buffer , x -> derCert -> length , NULL );
13367+ InitDecodedCert (cert , x -> derCert -> buffer , x -> derCert -> length , cm -> heap );
1335713368 if (ParseCertRelative (cert , CERT_TYPE , 0 , NULL ) == 0
1335813369 && !cert -> selfSigned ) {
1335913370 #ifndef NO_SKID
@@ -13375,8 +13386,8 @@ static int x509GetIssuerFromCM(WOLFSSL_X509 **issuer, WOLFSSL_CERT_MANAGER* cm,
1337513386
1337613387#ifdef WOLFSSL_SIGNER_DER_CERT
1337713388 /* populate issuer with Signer DER */
13378- if (wolfSSL_X509_d2i (issuer , ca -> derCert -> buffer ,
13379- ca -> derCert -> length ) == NULL )
13389+ if (wolfSSL_X509_d2i_ex (issuer , ca -> derCert -> buffer ,
13390+ ca -> derCert -> length , cm -> heap ) == NULL )
1338013391 return WOLFSSL_FAILURE ;
1338113392#else
1338213393 /* Create an empty certificate as CA doesn't have a certificate. */
@@ -13471,7 +13482,8 @@ WOLFSSL_X509* wolfSSL_X509_dup(WOLFSSL_X509 *x)
1347113482 return NULL ;
1347213483 }
1347313484
13474- return wolfSSL_X509_d2i (NULL , x -> derCert -> buffer , x -> derCert -> length );
13485+ return wolfSSL_X509_d2i_ex (NULL , x -> derCert -> buffer , x -> derCert -> length ,
13486+ x -> heap );
1347513487}
1347613488#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
1347713489
@@ -13841,7 +13853,7 @@ void wolfSSL_X509V3_set_ctx(WOLFSSL_X509V3_CTX* ctx, WOLFSSL_X509* issuer,
1384113853
1384213854 /* not checking ctx->x509 for null first since app won't have initialized
1384313855 * this X509V3_CTX before this function call */
13844- ctx -> x509 = wolfSSL_X509_new ( );
13856+ ctx -> x509 = wolfSSL_X509_new_ex ( issuer -> heap );
1384513857 if (!ctx -> x509 )
1384613858 return ;
1384713859
0 commit comments