From c97e56d7b7e9c56364000cd7a7364bffab59d7ef Mon Sep 17 00:00:00 2001 From: q66 Date: Thu, 15 Sep 2016 04:30:37 +0200 Subject: [PATCH] fix doargs segv --- src/cs_vm.hh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cs_vm.hh b/src/cs_vm.hh index 0d2e733..9cdedc4 100644 --- a/src/cs_vm.hh +++ b/src/cs_vm.hh @@ -352,11 +352,15 @@ static void cs_do_args(CsState &cs, F body) { } CsIdentLink *prevstack = cs.p_callstack->next; CsIdentLink aliaslink = { - cs.p_callstack->id, cs.p_callstack, prevstack->usedargs, prevstack->argstack + cs.p_callstack->id, cs.p_callstack, + prevstack ? prevstack->usedargs : ((1 << MaxArguments) - 1), + prevstack ? prevstack->argstack : nullptr }; cs.p_callstack = &aliaslink; cs_do_and_cleanup(ostd::move(body), [&]() { - prevstack->usedargs = aliaslink.usedargs; + if (prevstack) { + prevstack->usedargs = aliaslink.usedargs; + } cs.p_callstack = aliaslink.next; int argmask2 = cs.p_callstack->usedargs; for (int i = 0; argmask2; argmask2 >>= 1, ++i) {