From 2edd18c49d5c41fe04a5d90718bb952e1a22a3ca Mon Sep 17 00:00:00 2001 From: Daniel Pouzzner Date: Sat, 20 Jan 2024 13:08:21 -0600 Subject: [PATCH] src/x509.c: fix nullPointerRedundantCheck in wolfSSL_X509V3_set_ctx(). also adds thorough WOLFSSL_MSG() coverage for failures. --- src/x509.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/src/x509.c b/src/x509.c index 08dd41f59..b927d88e0 100644 --- a/src/x509.c +++ b/src/x509.c @@ -13848,35 +13848,50 @@ void wolfSSL_X509V3_set_ctx(WOLFSSL_X509V3_CTX* ctx, WOLFSSL_X509* issuer, { int ret = WOLFSSL_SUCCESS; WOLFSSL_ENTER("wolfSSL_X509V3_set_ctx"); - if (!ctx) - return; + if (!ctx) { + ret = WOLFSSL_FAILURE; + WOLFSSL_MSG("wolfSSL_X509V3_set_ctx() called with null ctx."); + } - /* not checking ctx->x509 for null first since app won't have initialized - * this X509V3_CTX before this function call */ - ctx->x509 = wolfSSL_X509_new_ex(issuer->heap); - if (!ctx->x509) - return; + if (ret == WOLFSSL_SUCCESS && (ctx->x509 != NULL)) { + ret = WOLFSSL_FAILURE; + WOLFSSL_MSG("wolfSSL_X509V3_set_ctx() called " + "with ctx->x509 already allocated."); + } + + if (ret == WOLFSSL_SUCCESS) { + ctx->x509 = wolfSSL_X509_new_ex( + (issuer && issuer->heap) ? issuer->heap : + (subject && subject->heap) ? subject->heap : + (req && req->heap) ? req->heap : + NULL); + if (!ctx->x509) { + ret = WOLFSSL_FAILURE; + WOLFSSL_MSG("wolfSSL_X509_new_ex() failed " + "in wolfSSL_X509V3_set_ctx()."); + } + } /* Set parameters in ctx as long as ret == WOLFSSL_SUCCESS */ - if (issuer) + if (ret == WOLFSSL_SUCCESS && issuer) ret = wolfSSL_X509_set_issuer_name(ctx->x509,&issuer->issuer); - if (subject && ret == WOLFSSL_SUCCESS) + if (ret == WOLFSSL_SUCCESS && subject) ret = wolfSSL_X509_set_subject_name(ctx->x509,&subject->subject); - if (req && ret == WOLFSSL_SUCCESS) { + if (ret == WOLFSSL_SUCCESS && req) { WOLFSSL_MSG("req not implemented."); } - if (crl && ret == WOLFSSL_SUCCESS) { + if (ret == WOLFSSL_SUCCESS && crl) { WOLFSSL_MSG("crl not implemented."); } - if (flag && ret == WOLFSSL_SUCCESS) { + if (ret == WOLFSSL_SUCCESS && flag) { WOLFSSL_MSG("flag not implemented."); } - if (!ret) { + if (ret != WOLFSSL_SUCCESS) { WOLFSSL_MSG("Error setting WOLFSSL_X509V3_CTX parameters."); } }