From: Otto Moerbeek Date: Wed, 6 Apr 2022 11:21:30 +0000 (+0200) Subject: Two Coverity reports: 1419403 Uncaught exception and 1419401 Uncaught exception X-Git-Tag: rec-4.7.0-beta1~12^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=57e9d0899ffdd8881108573fa3c21913f7ac6fd0;p=thirdparty%2Fpdns.git Two Coverity reports: 1419403 Uncaught exception and 1419401 Uncaught exception 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. --- diff --git a/pdns/iputils.hh b/pdns/iputils.hh index 225532cb7c..f8c1abef01 100644 --- a/pdns/iputils.hh +++ b/pdns/iputils.hh @@ -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;