Explorar el Código

Fix crash when trying to set fallback or next pass with one of parent

qarmin hace 6 años
padre
commit
4270403724
Se han modificado 2 ficheros con 13 adiciones y 2 borrados
  1. 7 1
      scene/resources/font.cpp
  2. 6 1
      scene/resources/material.cpp

+ 7 - 1
scene/resources/font.cpp

@@ -497,7 +497,13 @@ Size2 Font::get_string_size(const String &p_string) const {
 }
 void BitmapFont::set_fallback(const Ref<BitmapFont> &p_fallback) {
 
-	ERR_FAIL_COND(p_fallback == this);
+	for (Ref<BitmapFont> fallback_child = p_fallback; fallback_child != NULL; fallback_child = fallback_child->get_fallback()) {
+		if (fallback_child == this) {
+			ERR_EXPLAIN("Can't set as fallback one of its parents to prevent crashes due to recursive loop.");
+			ERR_FAIL_COND(fallback_child == this);
+		}
+	}
+
 	fallback = p_fallback;
 }
 

+ 6 - 1
scene/resources/material.cpp

@@ -34,7 +34,12 @@
 
 void Material::set_next_pass(const Ref<Material> &p_pass) {
 
-	ERR_FAIL_COND(p_pass == this);
+	for (Ref<Material> pass_child = p_pass; pass_child != NULL; pass_child = pass_child->get_next_pass()) {
+		if (pass_child == this) {
+			ERR_EXPLAIN("Can't set as next_pass one of its parents to prevent crashes due to recursive loop.");
+			ERR_FAIL_COND(pass_child == this);
+		}
+	}
 
 	if (next_pass == p_pass)
 		return;