From 862f48da45e6543f3e0efbd9200d1bd1fc3e83d7 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 19 Feb 2020 11:56:26 +0100 Subject: [PATCH] Expr: fix several memory leaks in BoolExpr::Eval() --- src/Expr.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Expr.cc b/src/Expr.cc index 2aab130e13..94e7076564 100644 --- a/src/Expr.cc +++ b/src/Expr.cc @@ -1631,7 +1631,10 @@ Val* BoolExpr::Eval(Frame* f) const } if ( ! scalar_v || ! vector_v ) + { + Unref(v1); return 0; + } VectorVal* result = 0; @@ -1657,13 +1660,18 @@ Val* BoolExpr::Eval(Frame* f) const // Only case remaining: both are vectors. Val* v2 = op2->Eval(f); if ( ! v2 ) + { + Unref(v1); return 0; + } VectorVal* vec_v1 = v1->AsVectorVal(); VectorVal* vec_v2 = v2->AsVectorVal(); if ( vec_v1->Size() != vec_v2->Size() ) { + Unref(v1); + Unref(v2); RuntimeError("vector operands have different sizes"); return 0; }