From ccc9c118eea5358de85fca56d2f293fc3caf9811 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sun, 25 Dec 2016 09:41:17 -0500 Subject: [PATCH] valgrind findings --- c/dsl/function_manager.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/c/dsl/function_manager.c b/c/dsl/function_manager.c index c1d3d2ac0..5f49f2d33 100644 --- a/c/dsl/function_manager.c +++ b/c/dsl/function_manager.c @@ -1153,11 +1153,15 @@ static rxval_evaluator_t* construct_builtin_function_callsite_xevaluator( pargs[i] = rxval_evaluator_alloc_from_ast(pchild, pfmgr, type_inferencing, context_flags); } pxevaluator = fmgr_alloc_xevaluator_from_variadic_func_name(function_name, pargs, nargs); + // xxx free args if xeval is null } else if (user_provided_arity == 1) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; rxval_evaluator_t* parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); pxevaluator = fmgr_alloc_xevaluator_from_unary_func_name(function_name, parg1); + if (pxevaluator == NULL) { // xxx gross to alloc & free right away like this ... + parg1->pfree_func(parg1); + } } else if (user_provided_arity == 2) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; @@ -1165,6 +1169,10 @@ static rxval_evaluator_t* construct_builtin_function_callsite_xevaluator( rxval_evaluator_t* parg1 = rxval_evaluator_alloc_from_ast(parg1_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); pxevaluator = fmgr_alloc_xevaluator_from_binary_func_name(function_name, parg1, parg2); + if (pxevaluator == NULL) { // xxx gross to alloc & free right away like this ... + parg1->pfree_func(parg1); + parg2->pfree_func(parg2); + } } else if (user_provided_arity == 3) { mlr_dsl_ast_node_t* parg1_node = pnode->pchildren->phead->pvvalue; @@ -1174,7 +1182,11 @@ static rxval_evaluator_t* construct_builtin_function_callsite_xevaluator( rxval_evaluator_t* parg2 = rxval_evaluator_alloc_from_ast(parg2_node, pfmgr, type_inferencing, context_flags); rxval_evaluator_t* parg3 = rxval_evaluator_alloc_from_ast(parg3_node, pfmgr, type_inferencing, context_flags); pxevaluator = fmgr_alloc_xevaluator_from_ternary_func_name(function_name, parg1, parg2, parg3); - + if (pxevaluator == NULL) { // xxx gross to alloc & free right away like this ... + parg1->pfree_func(parg1); + parg2->pfree_func(parg2); + parg3->pfree_func(parg3); + } } // xxx arity check ...