[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34736] trunk/blender/source/blender: fix [#25968] Crash on changing merge distance in array modifier with edgesplit modifier in chain

Campbell Barton ideasman42 at gmail.com
Wed Feb 9 05:45:57 CET 2011


Revision: 34736
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34736
Author:   campbellbarton
Date:     2011-02-09 04:45:53 +0000 (Wed, 09 Feb 2011)
Log Message:
-----------
fix [#25968] Crash on changing merge distance in array modifier with edgesplit modifier in chain

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-02-09 03:49:59 UTC (rev 34735)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2011-02-09 04:45:53 UTC (rev 34736)
@@ -456,6 +456,32 @@
 		nr--;
 	}
 
+	/* check corrupt cases, bowtie geometry, cant handle these because edge data wont exist so just return 0 */
+	if(nr==3) {
+		if(
+		/* real edges */
+			mface->v1==mface->v2 ||
+			mface->v2==mface->v3 ||
+			mface->v3==mface->v1
+		) {
+			return 0;
+		}
+	}
+	else if(nr==4) {
+		if(
+		/* real edges */
+			mface->v1==mface->v2 ||
+			mface->v2==mface->v3 ||
+			mface->v3==mface->v4 ||
+			mface->v4==mface->v1 ||
+		/* across the face */
+			mface->v1==mface->v3 ||
+			mface->v2==mface->v4
+		) {
+			return 0;
+		}
+	}
+
 	/* prevent a zero at wrong index location */
 	if(nr==3) {
 		if(mface->v3==0) {

Modified: trunk/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_array.c	2011-02-09 03:49:59 UTC (rev 34735)
+++ trunk/blender/source/blender/modifiers/intern/MOD_array.c	2011-02-09 04:45:53 UTC (rev 34736)
@@ -546,12 +546,10 @@
 				  if (inMF.v4)
 					  mf2->v4 = calc_mapping(indexMap, inMF.v4, j);
 
-				  test_index_face_maxvert(mf2, &result->faceData, numFaces, inMF.v4?4:3, numVerts);
 				  numFaces++;
 
 				  /* if the face has fewer than 3 vertices, don't create it */
-				  if(mf2->v3 == 0 || (mf2->v1 && (mf2->v1 == mf2->v3 || mf2->v1 ==
-								 mf2->v4))) {
+				  if(test_index_face_maxvert(mf2, &result->faceData, numFaces-1, inMF.v4?4:3, numVerts) < 3) {
 					  numFaces--;
 					  DM_free_face_data(result, numFaces, 1);
 								 }




More information about the Bf-blender-cvs mailing list