From 13be3be39454a3cf7b05c4399a53bd2dd27996f6 Mon Sep 17 00:00:00 2001 From: Tim King Date: Thu, 10 Nov 2016 09:40:23 -0800 Subject: [PATCH] Added PtrCloser guards for constructNodePtr. This ensures garbage collection on type checking exceptions. --- src/expr/node_builder.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/expr/node_builder.h b/src/expr/node_builder.h index 0dd4e44e8..d92524a19 100644 --- a/src/expr/node_builder.h +++ b/src/expr/node_builder.h @@ -171,6 +171,7 @@ namespace CVC4 { #include "base/cvc4_assert.h" #include "base/output.h" +#include "base/ptr_closer.h" #include "expr/kind.h" #include "expr/metakind.h" #include "expr/node_value.h" @@ -887,16 +888,18 @@ Node NodeBuilder::constructNode() const { template Node* NodeBuilder::constructNodePtr() { - Node *np = new Node(constructNV()); - maybeCheckType(*np); - return np; + // maybeCheckType() can throw an exception. Make sure to call the destructor + // on the exception branch. + PtrCloser np(new Node(constructNV())); + maybeCheckType(*np.get()); + return np.release(); } template Node* NodeBuilder::constructNodePtr() const { - Node *np = new Node(constructNV()); - maybeCheckType(*np); - return np; + PtrCloser np(new Node(constructNV())); + maybeCheckType(*np.get()); + return np.release(); } template -- 2.30.2