]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Two Coverity reports: 1419403 Uncaught exception and 1419401 Uncaught exception
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Wed, 6 Apr 2022 11:21:30 +0000 (13:21 +0200)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Wed, 6 Apr 2022 11:21:30 +0000 (13:21 +0200)
Both cases have the same root cause: a possible exception thrown
from NetmaskTree::copyTree.  Coverity negelects to report the calling
context, I'm assuming it is from a static initializer.  As a
NetmaskTree can only have valid nodes (insert does not allow an
invalid AF), reading from an existign tree should be fine.

pdns/iputils.hh

index 225532cb7c8ef1ceb978970ba80373d7c45018e7..f8c1abef019f5cecb0900fc42b9c417e9814f281 100644 (file)
@@ -884,17 +884,20 @@ private:
     }
   }
 
-  void copyTree(const NetmaskTree& rhs)
-  {
-    TreeNode *node;
-
-    node = rhs.d_root.get();
-    if (node != nullptr)
-      node = node->traverse_l();
-    while (node != nullptr) {
-      if (node->assigned)
-        insert(node->node.first).second = node->node.second;
-      node = node->traverse_lnr();
+  void copyTree(const NetmaskTree& rhs) noexcept
+  {
+    try {
+      TreeNode *node = rhs.d_root.get();
+      if (node != nullptr)
+        node = node->traverse_l();
+      while (node != nullptr) {
+        if (node->assigned)
+          insert(node->node.first).second = node->node.second;
+        node = node->traverse_lnr();
+      }
+    }
+    catch (...) {
+      abort();
     }
   }
 
@@ -967,11 +970,11 @@ public:
   NetmaskTree() noexcept: d_root(new TreeNode()), d_left(nullptr), d_size(0) {
   }
 
-  NetmaskTree(const NetmaskTree& rhs): d_root(new TreeNode()), d_left(nullptr), d_size(0) {
+  NetmaskTree(const NetmaskTree& rhs) noexcept: d_root(new TreeNode()), d_left(nullptr), d_size(0) {
     copyTree(rhs);
   }
 
-  NetmaskTree& operator=(const NetmaskTree& rhs) {
+  NetmaskTree& operator=(const NetmaskTree& rhs) noexcept {
     clear();
     copyTree(rhs);
     return *this;