diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2020-01-16 15:57:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-16 15:57:44 +0100 |
commit | f2aa99a8e2d33e534fa3adbff2981a9c902bbf32 (patch) | |
tree | 4f08b36b86fb5bee0585f8e534148657219e23e8 | |
parent | 4998983bd5afde7e23dc5463f10b5178993e29c7 (diff) | |
parent | dc4455d819a9590d1dc9aabcc3fd0ec1f07b8bba (diff) |
Merge pull request #35201 from bojidar-bg/27582-gdfunction-validate-instance
Validate instances of objects before trying to check their type in GDScript
-rw-r--r-- | modules/gdscript/gdscript_function.h | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/modules/gdscript/gdscript_function.h b/modules/gdscript/gdscript_function.h index 236ca720a2..ad95ebc543 100644 --- a/modules/gdscript/gdscript_function.h +++ b/modules/gdscript/gdscript_function.h @@ -76,14 +76,17 @@ struct GDScriptDataType { if (p_variant.get_type() != Variant::OBJECT) { return false; } + Object *obj = p_variant.operator Object *(); - if (obj) { - if (!ClassDB::is_parent_class(obj->get_class_name(), native_type)) { - // Try with underscore prefix - StringName underscore_native_type = "_" + native_type; - if (!ClassDB::is_parent_class(obj->get_class_name(), underscore_native_type)) { - return false; - } + if (!obj || !ObjectDB::instance_validate(obj)) { + return false; + } + + if (!ClassDB::is_parent_class(obj->get_class_name(), native_type)) { + // Try with underscore prefix + StringName underscore_native_type = "_" + native_type; + if (!ClassDB::is_parent_class(obj->get_class_name(), underscore_native_type)) { + return false; } } return true; @@ -96,7 +99,12 @@ struct GDScriptDataType { if (p_variant.get_type() != Variant::OBJECT) { return false; } + Object *obj = p_variant.operator Object *(); + if (!obj || !ObjectDB::instance_validate(obj)) { + return false; + } + Ref<Script> base = obj && obj->get_script_instance() ? obj->get_script_instance()->get_script() : NULL; bool valid = false; while (base.is_valid()) { |