From 95c036a08ae820bec2574ac69d1e28480c53eb4b Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Mon, 14 Oct 2019 17:17:46 -0600 Subject: [PATCH] static analysis tests for memory management --- src/ocsp.c | 17 +++++++++++------ src/ssl.c | 18 ++++++------------ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/ocsp.c b/src/ocsp.c index de9d6dce0..e7dade0ce 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -898,21 +898,26 @@ int wolfSSL_i2d_OCSP_REQUEST_bio(WOLFSSL_BIO* out, return WOLFSSL_FAILURE; size = wolfSSL_i2d_OCSP_REQUEST(req, NULL); - if (size > 0) - data = (unsigned char*) XMALLOC(size,NULL,DYNAMIC_TYPE_TMP_BUFFER); - if (data != NULL) + if (size > 0) { + data = (unsigned char*) XMALLOC(size, out->heap, + DYNAMIC_TYPE_TMP_BUFFER); + } + + if (data != NULL) { size = wolfSSL_i2d_OCSP_REQUEST(req, &data); + } if (size <= 0) { - XFREE(data,NULL,DYNAMIC_TYPE_TMP_BUFFER); + XFREE(data, out->heap, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_FAILURE; } - if (wolfSSL_BIO_write(out,data,size) == (int)size) { - XFREE(data,NULL,DYNAMIC_TYPE_TMP_BUFFER); + if (wolfSSL_BIO_write(out, data, size) == (int)size) { + XFREE(data, out->heap, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_SUCCESS; } + XFREE(data, out->heap, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_FAILURE; } #endif /* OPENSSL_ALL || APACHE_HTTPD */ diff --git a/src/ssl.c b/src/ssl.c index 9c3257e43..89ad80490 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -19706,7 +19706,7 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509) x509->pubKey.length, x509->heap, DYNAMIC_TYPE_PUBLIC_KEY); if (key->pkey.ptr == NULL) { - XFREE(key, x509->heap, DYNAMIC_TYPE_PUBLIC_KEY); + wolfSSL_EVP_PKEY_free(key); return NULL; } XMEMCPY(key->pkey.ptr, x509->pubKey.buffer, x509->pubKey.length); @@ -19722,16 +19722,14 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509) key->ownRsa = 1; key->rsa = wolfSSL_RSA_new(); if (key->rsa == NULL) { - XFREE(key, x509->heap, DYNAMIC_TYPE_PUBLIC_KEY); + wolfSSL_EVP_PKEY_free(key); return NULL; } if (wolfSSL_RSA_LoadDer_ex(key->rsa, (const unsigned char*)key->pkey.ptr, key->pkey_sz, WOLFSSL_RSA_LOAD_PUBLIC) != SSL_SUCCESS) { - wolfSSL_RSA_free(key->rsa); - key->rsa = NULL; - XFREE(key, x509->heap, DYNAMIC_TYPE_PUBLIC_KEY); + wolfSSL_EVP_PKEY_free(key); return NULL; } } @@ -19745,7 +19743,7 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509) key->ownEcc = 1; key->ecc = wolfSSL_EC_KEY_new(); if (key->ecc == NULL || key->ecc->internal == NULL) { - XFREE(key, x509->heap, DYNAMIC_TYPE_PUBLIC_KEY); + wolfSSL_EVP_PKEY_free(key); return NULL; } @@ -19754,17 +19752,13 @@ WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509* x509) if (wc_EccPublicKeyDecode((const unsigned char*)key->pkey.ptr, &idx, (ecc_key*)key->ecc->internal, key->pkey_sz) < 0) { WOLFSSL_MSG("wc_EccPublicKeyDecode failed"); - wolfSSL_EC_KEY_free(key->ecc); - key->ecc = NULL; - XFREE(key, x509->heap, DYNAMIC_TYPE_PUBLIC_KEY); + wolfSSL_EVP_PKEY_free(key); return NULL; } if (SetECKeyExternal(key->ecc) != SSL_SUCCESS) { WOLFSSL_MSG("SetECKeyExternal failed"); - wolfSSL_EC_KEY_free(key->ecc); - key->ecc = NULL; - XFREE(key, x509->heap, DYNAMIC_TYPE_PUBLIC_KEY); + wolfSSL_EVP_PKEY_free(key); return NULL; }