diff options
author | George Marques <george@gmarqu.es> | 2020-01-09 13:59:33 -0300 |
---|---|---|
committer | George Marques <george@gmarqu.es> | 2020-01-09 13:59:33 -0300 |
commit | 3718f8f5925bad0662d9ae84192d094b5da4d644 (patch) | |
tree | 2eae81ee33b67e204def8ea4b9e549c89e5753bf /modules/gdscript | |
parent | e97e951741c5f1a5865e1b551edb184af6374999 (diff) |
GDScript: Validate object instance on `is` operation
Avoids crashes on debug mode. Instead it now breaks the execution and
show the error in-editor. Will still crash on release.
Also add a similar check to Marshalls to ensure the debugger doesn't
crash when trying to serialize the invalid instance.
Diffstat (limited to 'modules/gdscript')
-rw-r--r-- | modules/gdscript/gdscript_function.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript_function.cpp b/modules/gdscript/gdscript_function.cpp index a01a7397fe..eef39da8b5 100644 --- a/modules/gdscript/gdscript_function.cpp +++ b/modules/gdscript/gdscript_function.cpp @@ -500,6 +500,13 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a Object *obj_A = *a; Object *obj_B = *b; +#ifdef DEBUG_ENABLED + if (!ObjectDB::instance_validate(obj_A)) { + err_text = "Left operand of 'is' was already freed."; + OPCODE_BREAK; + } +#endif // DEBUG_ENABLED + GDScript *scr_B = Object::cast_to<GDScript>(obj_B); if (scr_B) { |