From: Otto Date: Wed, 15 Dec 2021 13:47:02 +0000 (+0100) Subject: Use smart pointer for digest context X-Git-Tag: auth-4.7.0-alpha1~67^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f8ef7a23a55bde4792824dfef01b8e3a29d6290;p=thirdparty%2Fpdns.git Use smart pointer for digest context --- diff --git a/pdns/sha.hh b/pdns/sha.hh index 077b1db2cb..258a43243c 100644 --- a/pdns/sha.hh +++ b/pdns/sha.hh @@ -58,9 +58,9 @@ namespace pdns class SHADigest { public: - SHADigest(unsigned int bits) + SHADigest(unsigned int bits) : + mdctx(std::unique_ptr(EVP_MD_CTX_new(), EVP_MD_CTX_free)) { - mdctx = EVP_MD_CTX_new(); if (mdctx == nullptr) { throw std::runtime_error("SHADigest: EVP_MD_CTX_new failed"); } @@ -77,7 +77,7 @@ public: default: throw std::runtime_error("SHADigest: unsupported size"); } - if (EVP_DigestInit_ex(mdctx, md, NULL) == 0) { + if (EVP_DigestInit_ex(mdctx.get(), md, NULL) == 0) { throw std::runtime_error("SHADigest: init error"); } } @@ -85,14 +85,11 @@ public: ~SHADigest() { // No free of md needed afaik - if (mdctx != nullptr) { - EVP_MD_CTX_free(mdctx); - } } void process(const std::string& msg) { - if (EVP_DigestUpdate(mdctx, msg.data(), msg.size()) == 0) { + if (EVP_DigestUpdate(mdctx.get(), msg.data(), msg.size()) == 0) { throw std::runtime_error("SHADigest: update error"); } } @@ -102,7 +99,7 @@ public: std::string md_value; md_value.resize(EVP_MD_size(md)); unsigned int md_len; - if (EVP_DigestFinal_ex(mdctx, reinterpret_cast(md_value.data()), &md_len) == 0) { + if (EVP_DigestFinal_ex(mdctx.get(), reinterpret_cast(md_value.data()), &md_len) == 0) { throw std::runtime_error("SHADigest: finalize error"); } if (md_len != md_value.size()) { @@ -112,7 +109,7 @@ public: } private: - EVP_MD_CTX* mdctx{nullptr}; + std::unique_ptr mdctx; const EVP_MD* md; }; } diff --git a/pdns/test-zonemd_cc.cc b/pdns/test-zonemd_cc.cc index 84130ef62b..bbea09d7df 100644 --- a/pdns/test-zonemd_cc.cc +++ b/pdns/test-zonemd_cc.cc @@ -25,11 +25,9 @@ static void testZoneMD(const std::string& zone, const std::string& file, bool ex pdns::zonemdVerify(z, zpt, validationDone, validationOK); } catch (const PDNSException& e) { - cerr << e.reason << endl; BOOST_CHECK(ex); } catch (const std::exception& e) { - cerr << e.what() << endl; BOOST_CHECK(ex); }