aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-10-02 22:08:19 +0200
committerEelco Dolstra <edolstra@gmail.com>2019-10-02 22:08:19 +0200
commit90d6018509e60fd07d93ddefbf6f983a72d4b587 (patch)
tree0146309d7a66c1aca90a54a29350eb1f06d0cf17 /src/libexpr
parent780c1a8f271113cea7d70d57f44afce5da5928d6 (diff)
Fix aborts when using builtins.getFlake
In that case, 'self' could refer to a value on the stack, so accessing 'self.rev' would abort.
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/flake/flake.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc
index 2061a34a4..9e260263c 100644
--- a/src/libexpr/flake/flake.cc
+++ b/src/libexpr/flake/flake.cc
@@ -574,8 +574,9 @@ static void prim_callFlake(EvalState & state, const Pos & pos, Value * * args, V
void callFlake(EvalState & state,
const Flake & flake,
const LockedInputs & lockedInputs,
- Value & vRes)
+ Value & vResFinal)
{
+ auto & vRes = *state.allocValue();
auto & vInputs = *state.allocValue();
state.mkAttrs(vInputs, flake.inputs.size() + 1);
@@ -617,6 +618,8 @@ void callFlake(EvalState & state,
state.callFunction(vCall, *flake.vOutputs, vCall2, noPos);
state.callFunction(vCall2, vInputs, vCall3, noPos);
state.callFunction(vCall3, vSourceInfo, vRes, noPos);
+
+ vResFinal = vRes;
}
void callFlake(EvalState & state,