[Bf-blender-cvs] [4c2a3b47014] blender2.8: Fix T57878: 2.8 Opening project in Blender Crashes.

Bastien Montagne noreply at git.blender.org
Thu Nov 29 15:49:19 CET 2018


Commit: 4c2a3b47014c086ad2856524ee3d542d5ba1d245
Author: Bastien Montagne
Date:   Thu Nov 29 15:48:08 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB4c2a3b47014c086ad2856524ee3d542d5ba1d245

Fix T57878: 2.8 Opening project in Blender Crashes.

Crash was due to some modifier trying to access the editmesh of its
target just after loading, when that editmesh has not yet been
re-created...

===================================================================

M	source/blender/blenkernel/intern/modifier.c

===================================================================

diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 73a9d462687..d67a3080819 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -907,20 +907,22 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(
 /**
  * Get evaluated mesh for other evaluated object, which is used as an operand for the modifier,
  * e.g. second operand for boolean modifier.
- * Note thqt modifiers in stack always get fully evaluated COW ID pointers, never original ones. Makes things simpler.
+ * Note that modifiers in stack always get fully evaluated COW ID pointers, never original ones. Makes things simpler.
  */
 Mesh *BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval, bool *r_free_mesh)
 {
-	Mesh *me;
+	Mesh *me = NULL;
 
 	if ((ob_eval->type == OB_MESH) && (ob_eval->mode & OB_MODE_EDIT)) {
 		/* Note: currently we have no equivalent to derived cagemesh or even final dm in BMEditMesh...
 		 * This is TODO in core depsgraph/modifier stack code still. */
 		BMEditMesh *em = BKE_editmesh_from_object(ob_eval);
-		me = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, 0);
-		*r_free_mesh = true;
+		if (em != NULL) {  /* em might not exist yet in some cases, just after loading a .blend file, see T57878. */
+			me = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, 0);
+			*r_free_mesh = true;
+		}
 	}
-	else {
+	if (me == NULL) {
 		me = ob_eval->runtime.mesh_eval;
 		*r_free_mesh = false;
 	}



More information about the Bf-blender-cvs mailing list