From d4387493fbae01dd7b98efcad28cb8c200dafced Mon Sep 17 00:00:00 2001 From: Hideki Miyazaki Date: Tue, 7 Sep 2021 07:11:29 +0900 Subject: [PATCH] keep CRLInfo at own cert memory (#4374) --- src/internal.c | 17 +++++++++++++++-- wolfssl/internal.h | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/internal.c b/src/internal.c index 82101ec0c..5b787b183 100644 --- a/src/internal.c +++ b/src/internal.c @@ -3808,6 +3808,10 @@ void FreeX509(WOLFSSL_X509* x509) XFREE(x509->authInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); x509->authInfo = NULL; } + if (x509->CRLInfo != NULL) { + XFREE(x509->CRLInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); + x509->CRLInfo = NULL; + } #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) if (x509->authInfoCaIssuer != NULL) { XFREE(x509->authInfoCaIssuer, x509->heap, DYNAMIC_TYPE_X509_EXT); @@ -10526,8 +10530,17 @@ int CopyDecodedToX509(WOLFSSL_X509* x509, DecodedCert* dCert) x509->CRLdistSet = dCert->extCRLdistSet; x509->CRLdistCrit = dCert->extCRLdistCrit; - x509->CRLInfo = dCert->extCrlInfo; - x509->CRLInfoSz = dCert->extCrlInfoSz; + if (dCert->extCrlInfo != NULL && dCert->extCrlInfoSz > 0) { + x509->CRLInfo = (byte*)XMALLOC(dCert->extCrlInfoSz, x509->heap, + DYNAMIC_TYPE_X509_EXT); + if (x509->CRLInfo != NULL) { + XMEMCPY(x509->CRLInfo, dCert->extCrlInfo, dCert->extCrlInfoSz); + x509->CRLInfoSz = dCert->extCrlInfoSz; + } + else { + ret = MEMORY_E; + } + } x509->authInfoSet = dCert->extAuthInfoSet; x509->authInfoCrit = dCert->extAuthInfoCrit; if (dCert->extAuthInfo != NULL && dCert->extAuthInfoSz > 0) { diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 2b220e197..ced5bb0a9 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -3935,7 +3935,7 @@ struct WOLFSSL_X509 { #ifdef OPENSSL_ALL byte* subjAltNameSrc; #endif - const byte* CRLInfo; + byte* CRLInfo; byte* authInfo; #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) byte* authInfoCaIssuer;