aboutsummaryrefslogtreecommitdiff
path: root/modules/gdscript/gd_function.cpp
diff options
context:
space:
mode:
authorHein-Pieter van Braam2017-02-13 21:43:27 +0100
committerRémi Verschelde2017-03-18 20:09:45 +0100
commit38e86c8c244d37d2530fd9c89c520def8ea04767 (patch)
treee8813a0f1d48f22a126b8c51e1ed6201cc98c4f4 /modules/gdscript/gd_function.cpp
parent616850b3c0662d1e86df5ddb5c767359dd722daf (diff)
downloadgodot-38e86c8c244d37d2530fd9c89c520def8ea04767.tar.gz
godot-38e86c8c244d37d2530fd9c89c520def8ea04767.tar.zst
godot-38e86c8c244d37d2530fd9c89c520def8ea04767.zip
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 (cherry picked from commit e8611966de4dfc9c28a7a4de1798f3f10ff87f80)
Diffstat (limited to 'modules/gdscript/gd_function.cpp')
-rw-r--r--modules/gdscript/gd_function.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/modules/gdscript/gd_function.cpp b/modules/gdscript/gd_function.cpp
index 47d8f0b40..3a615ee55 100644
--- a/modules/gdscript/gd_function.cpp
+++ b/modules/gdscript/gd_function.cpp
@@ -171,7 +171,7 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a
if (p_state) {
//use existing (supplied) state (yielded)
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;
ip=p_state->ip;
alloca_size=p_state->stack.size();