]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Use smart pointer for digest context
authorOtto <otto.moerbeek@open-xchange.com>
Wed, 15 Dec 2021 13:47:02 +0000 (14:47 +0100)
committerOtto <otto.moerbeek@open-xchange.com>
Wed, 15 Dec 2021 13:49:58 +0000 (14:49 +0100)
pdns/sha.hh
pdns/test-zonemd_cc.cc

index 077b1db2cb46b0abd2b46a3b5d7878308cbb9ee4..258a43243cea24ee6bab101efec95fe277594aaf 100644 (file)
@@ -58,9 +58,9 @@ namespace pdns
 class SHADigest
 {
 public:
-  SHADigest(unsigned int bits)
+  SHADigest(unsigned int bits) :
+    mdctx(std::unique_ptr<EVP_MD_CTX, void (*)(EVP_MD_CTX*)>(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<unsigned char*>(md_value.data()), &md_len) == 0) {
+    if (EVP_DigestFinal_ex(mdctx.get(), reinterpret_cast<unsigned char*>(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<EVP_MD_CTX, void (*)(EVP_MD_CTX*)> mdctx;
   const EVP_MD* md;
 };
 }
index 84130ef62b3c3d60e9cc896ea28094f00d1bbd2f..bbea09d7df3ec26e3c2d7ddc8e9bfb99fde8195b 100644 (file)
@@ -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);
   }