diff options
author | George Marques <george@gmarqu.es> | 2021-05-24 14:18:39 -0300 |
---|---|---|
committer | George Marques <george@gmarqu.es> | 2021-05-24 14:23:02 -0300 |
commit | ea44744e2daf512ac97ba7176d1e65d77b4f8042 (patch) | |
tree | 4a19de4047b568b764a31212a02df2b54677aa06 /core | |
parent | ffdb3cccd2a80417475826151d93529893809850 (diff) |
Make Callable not crash on call when the object has been freed
Also add a GDScript test for this case.
Diffstat (limited to 'core')
-rw-r--r-- | core/variant/callable.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/core/variant/callable.cpp b/core/variant/callable.cpp index e06b3e07ef..5c87042f6b 100644 --- a/core/variant/callable.cpp +++ b/core/variant/callable.cpp @@ -50,6 +50,15 @@ void Callable::call(const Variant **p_arguments, int p_argcount, Variant &r_retu custom->call(p_arguments, p_argcount, r_return_value, r_call_error); } else { Object *obj = ObjectDB::get_instance(ObjectID(object)); +#ifdef DEBUG_ENABLED + if (!obj) { + r_call_error.error = CallError::CALL_ERROR_INSTANCE_IS_NULL; + r_call_error.argument = 0; + r_call_error.expected = 0; + r_return_value = Variant(); + return; + } +#endif r_return_value = obj->call(method, p_arguments, p_argcount, r_call_error); } } |