memory leak in d2i_X509_CRL

This commit is contained in:
Takashi Kojo
2018-05-05 14:41:35 +09:00
parent 76686c9e20
commit 6cef2e5d31
2 changed files with 11 additions and 14 deletions

View File

@@ -49,8 +49,10 @@
int InitCRL(WOLFSSL_CRL* crl, WOLFSSL_CERT_MANAGER* cm)
{
WOLFSSL_ENTER("InitCRL");
crl->heap = cm->heap;
if(cm != NULL)
crl->heap = cm->heap;
else
crl->heap = NULL;
crl->cm = cm;
crl->crlList = NULL;
crl->monitors[0].path = NULL;
@@ -153,7 +155,7 @@ void FreeCRL(WOLFSSL_CRL* crl, int dynamic)
CRL_Entry* tmp = crl->crlList;
WOLFSSL_ENTER("FreeCRL");
printf("sizeof(CRL_Entry)=%lu\n", sizeof(CRL_Entry));
if (crl->monitors[0].path)
XFREE(crl->monitors[0].path, crl->heap, DYNAMIC_TYPE_CRL_MONITOR);

View File

@@ -17976,7 +17976,6 @@ int wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX* ctx)
WOLFSSL_X509_CRL* wolfSSL_d2i_X509_CRL(WOLFSSL_X509_CRL** crl, const unsigned char* in, int len)
{
WOLFSSL_X509_CRL *newcrl = NULL;
WOLFSSL_CERT_MANAGER *cert= NULL;
int ret ;
WOLFSSL_ENTER("wolfSSL_X509_CRL_d2i");
@@ -17991,12 +17990,7 @@ WOLFSSL_X509_CRL* wolfSSL_d2i_X509_CRL(WOLFSSL_X509_CRL** crl, const unsigned ch
WOLFSSL_MSG("New CRL allocation failed");
return NULL;
}
cert = wolfSSL_CertManagerNew();
if (cert == NULL){
WOLFSSL_MSG("CertManagerNew failed");
goto err_exit;
}
if (InitCRL(newcrl, cert) < 0) {
if (InitCRL(newcrl, NULL) < 0) {
WOLFSSL_MSG("Init tmp CRL failed");
goto err_exit;
}
@@ -18014,8 +18008,6 @@ err_exit:
if(newcrl != NULL)
XFREE(newcrl, NULL, DYNAMIC_TYPE_FILE);
newcrl = NULL;
if(cert != NULL)
wolfSSL_CertManagerFree(cert);
_exit:
return newcrl;
}
@@ -27499,8 +27491,8 @@ WOLFSSL_RSA *wolfSSL_d2i_RSAPublicKey(WOLFSSL_RSA **r, const unsigned char **pp,
WOLFSSL_MSG("RSA_LoadDer failed");
return NULL;
}
*r = rsa;
if(r != NULL)
*r = rsa;
return rsa;
}
@@ -28560,10 +28552,13 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
goto err_exit;
if((PemToDer(pem, pemSz, CRL_TYPE, &der, NULL, NULL, NULL)) < 0)
goto err_exit;
XFREE(pem, 0, DYNAMIC_TYPE_PEM);
derSz = der->length;
if((newcrl = wolfSSL_d2i_X509_CRL(crl, (const unsigned char *)der->buffer, derSz)) == NULL)
goto err_exit;
FreeDer(&der);
return newcrl;
err_exit: