Bladeren bron

Merge pull request #35201 from bojidar-bg/27582-gdfunction-validate-instance

Validate instances of objects before trying to check their type in GDScript
Rémi Verschelde 5 jaren geleden
bovenliggende
commit
f2aa99a8e2
1 gewijzigde bestanden met toevoegingen van 15 en 7 verwijderingen
  1. 15 7
      modules/gdscript/gdscript_function.h

+ 15 - 7
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()) {