Remove bounds check when resuming from yield.
The code would get a pointer to the beginning of the call_args by using operator[] at the stack Vector. This does bound checking. When there are no call_args this bound check fails and the error mentioned in #7796 gets triggered. This bound check is actually not necessary as call_args just gets set to NULL and never dereferenced. This new code will just unconditionally set the pointer to the place where the call_args are if there are any. There is no NULL check for call_args anywhere so this is safe. Fixes #7796
This commit is contained in:
parent
ea7e8c8e86
commit
e8611966de
1 changed files with 1 additions and 1 deletions
|
@ -171,7 +171,7 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a
|
||||||
if (p_state) {
|
if (p_state) {
|
||||||
//use existing (supplied) state (yielded)
|
//use existing (supplied) state (yielded)
|
||||||
stack=(Variant*)p_state->stack.ptr();
|
stack=(Variant*)p_state->stack.ptr();
|
||||||
call_args=(Variant**)&p_state->stack[sizeof(Variant)*p_state->stack_size];
|
call_args=(Variant**)stack + sizeof(Variant)*p_state->stack_size;
|
||||||
line=p_state->line;
|
line=p_state->line;
|
||||||
ip=p_state->ip;
|
ip=p_state->ip;
|
||||||
alloca_size=p_state->stack.size();
|
alloca_size=p_state->stack.size();
|
||||||
|
|
Loading…
Reference in a new issue