diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-11-09 15:09:31 +0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-11-09 15:09:31 +0100 |
commit | 88164325fac228e8e27fdea27776416d67a85dd6 (patch) | |
tree | 47103c181f4039c06280aa2debe076195c89fdcc /src | |
parent | f581ce0b0cb86670db2b806f98ac0ec368b8cdc1 (diff) |
Fix a segfault when auto-calling a "a@{...}" function
Since the called function can return its argument attribute set
(e.g. "a"), the latter should not be allocated on the stack.
Reported by Shea.
Diffstat (limited to 'src')
-rw-r--r-- | src/libexpr/eval.cc | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index 2f9601ec5..b176bbc82 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -790,20 +790,20 @@ void EvalState::autoCallFunction(Bindings & args, Value & fun, Value & res) return; } - Value actualArgs; - mkAttrs(actualArgs, fun.lambda.fun->formals->formals.size()); + Value * actualArgs = allocValue(); + mkAttrs(*actualArgs, fun.lambda.fun->formals->formals.size()); foreach (Formals::Formals_::iterator, i, fun.lambda.fun->formals->formals) { Bindings::iterator j = args.find(i->name); if (j != args.end()) - actualArgs.attrs->push_back(*j); + actualArgs->attrs->push_back(*j); else if (!i->def) throwTypeError("cannot auto-call a function that has an argument without a default value (`%1%')", i->name); } - actualArgs.attrs->sort(); + actualArgs->attrs->sort(); - callFunction(fun, actualArgs, res); + callFunction(fun, *actualArgs, res); } |