From d9c394e0fadda1b7b1895fea57698a20aee12450 Mon Sep 17 00:00:00 2001 From: badaix Date: Thu, 6 Jun 2024 21:54:39 +0200 Subject: [PATCH] Fix mem leaks --- common/jwt.cpp | 30 +++++++++++++++--------------- test/test_main.cpp | 22 +++++++++++----------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/common/jwt.cpp b/common/jwt.cpp index 5ea6282a..f9bf6baa 100644 --- a/common/jwt.cpp +++ b/common/jwt.cpp @@ -23,12 +23,6 @@ #include "common/aixlog.hpp" #include "common/base64.h" #include "common/utils/string_utils.hpp" -#include -#include -#include -#include -#include -#include // 3rd party headers #include @@ -38,9 +32,16 @@ #include #include #include -#include +#include // standard headers +#include +#include +#include +#include +#include +#include +#include static constexpr auto LOG_TAG = "JWT"; @@ -107,8 +108,8 @@ EVP_PKEY* readCert(const std::string& key) // Copies the data pointer. D2I functions update it const auto* data_pkey = reinterpret_cast(data); // Detects type and decodes the private key - X509* x509 = d2i_X509(nullptr, &data_pkey, datalen); - EVP_PKEY* pkey = X509_get_pubkey(x509); + std::shared_ptr x509(d2i_X509(nullptr, &data_pkey, datalen), [](auto* p) { X509_free(p); }); + EVP_PKEY* pkey = X509_get_pubkey(x509.get()); if (pkey == nullptr) { LOG(ERROR, LOG_TAG) << "d2i_AutoPrivateKey failed\n"; @@ -158,24 +159,23 @@ bool sign(const std::string& pem_key, const std::string& msg, std::vector key(readCert(pem_cert), [](auto p) { EVP_PKEY_free(p); }); - EVP_MD_CTX* ctx = EVP_MD_CTX_create(); + std::shared_ptr ctx(EVP_MD_CTX_create(), [](auto p) { EVP_MD_CTX_free(p); }); - if (EVP_DigestVerifyInit(ctx, nullptr, EVP_sha256(), nullptr, key.get()) <= 0) + if (EVP_DigestVerifyInit(ctx.get(), nullptr, EVP_sha256(), nullptr, key.get()) <= 0) { LOG(ERROR, LOG_TAG) << "EVP_DigestVerifyInit failed\n"; return false; } - if (EVP_DigestVerifyUpdate(ctx, Msg, MsgLen) <= 0) + if (EVP_DigestVerifyUpdate(ctx.get(), Msg, MsgLen) <= 0) { LOG(ERROR, LOG_TAG) << "EVP_DigestVerifyInit failed\n"; return false; } - int authStatus = EVP_DigestVerifyFinal(ctx, MsgHash, MsgHashLen); - EVP_MD_CTX_free(ctx); + int authStatus = EVP_DigestVerifyFinal(ctx.get(), MsgHash, MsgHashLen); if (authStatus == 1) { Authentic = true; diff --git a/test/test_main.cpp b/test/test_main.cpp index 45ceace7..abe7fb09 100644 --- a/test/test_main.cpp +++ b/test/test_main.cpp @@ -165,18 +165,18 @@ TEST_CASE("JWT") jwt.setSub("Badaix"); std::optional token = jwt.getToken(key); REQUIRE(token.has_value()); - // REQUIRE(token.value() == - // "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjIsInN1YiI6IkJhZGFpeCJ9.LtKDGnT2OSgvWLECReajyMmUv7ApJeRu83MZhDM7d_" - // "1t1zy2Z08BQZEEB58WzR1vZAtRGHDVrYytJaVCPzibQN4eZ1F4m0gDk83hxQPTAKsbwjtzi7pUJzvaBa1ni4ysc9POtoi_M1OtNk5xxziyk5VP1Ph-" - // "TQbm9BCPfpA8bSUCx0LFrm5gyCD3irkww_W3RwDc2ghrjDCRNCyu4R9__lrCRGdx3Z8i0YMB_obuShcYzJXFSxG8adTSs3PQ_R4NXR94-vydVrvBxqe79apocFVrs_" - // "c9Ub8TIFynzqp9L_s206nb2N3C1WfUkKeQ1E7gAgVq8b4SM0OZsmkERQ0P0w"); + REQUIRE(token.value() == + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MTYyMzkwMjIsInN1YiI6IkJhZGFpeCJ9.LtKDGnT2OSgvWLECReajyMmUv7ApJeRu83MZhDM7d_" + "1t1zy2Z08BQZEEB58WzR1vZAtRGHDVrYytJaVCPzibQN4eZ1F4m0gDk83hxQPTAKsbwjtzi7pUJzvaBa1ni4ysc9POtoi_M1OtNk5xxziyk5VP1Ph-" + "TQbm9BCPfpA8bSUCx0LFrm5gyCD3irkww_W3RwDc2ghrjDCRNCyu4R9__lrCRGdx3Z8i0YMB_obuShcYzJXFSxG8adTSs3PQ_R4NXR94-vydVrvBxqe79apocFVrs_" + "c9Ub8TIFynzqp9L_s206nb2N3C1WfUkKeQ1E7gAgVq8b4SM0OZsmkERQ0P0w"); - // REQUIRE(jwt.parse(token.value(), cert)); - // REQUIRE(jwt.getSub().has_value()); - // REQUIRE(jwt.getSub().value() == "Badaix"); - // REQUIRE(jwt.getIat().has_value()); - // REQUIRE(jwt.getIat().value() == std::chrono::seconds(1516239022)); - // REQUIRE(!jwt.getExp().has_value()); + REQUIRE(jwt.parse(token.value(), cert)); + REQUIRE(jwt.getSub().has_value()); + REQUIRE(jwt.getSub().value() == "Badaix"); + REQUIRE(jwt.getIat().has_value()); + REQUIRE(jwt.getIat().value() == std::chrono::seconds(1516239022)); + REQUIRE(!jwt.getExp().has_value()); } }