[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44879] trunk/blender/source/blender/ blenkernel/intern/DerivedMesh.c: Fix crash on edge extrude from textured view

Sergey Sharybin sergey.vfx at gmail.com
Wed Mar 14 15:10:00 CET 2012


Revision: 44879
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44879
Author:   nazgul
Date:     2012-03-14 14:09:56 +0000 (Wed, 14 Mar 2012)
Log Message:
-----------
Fix crash on edge extrude from textured view

Issue was caused by MFACE layer adding for even DM without tessellated faces
which lead to adding new layer but with NULL data. This causes issues when layer
with faces (after extrude) was attempting to add because currently CD only checks
if layer type exists but does not check for size of the layer.

Solved by not adding MFACE layer if there's no tessellated faces.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-03-14 13:52:17 UTC (rev 44878)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-03-14 14:09:56 UTC (rev 44879)
@@ -119,8 +119,17 @@
 	MFace *mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
 
 	if (!mface) {
-		mface = CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL,
-			dm->getNumTessFaces(dm));
+		int numTessFaces = dm->getNumTessFaces(dm);
+		
+		if (!numTessFaces) {
+			/* Do not add layer if there's no elements in it, this leads to issues later when
+			 * this layer is needed with non-zero size, but currently CD stuff does not check
+			 * for requested layer size on creation and just returns layer which was previously
+			 * added (sergey) */
+			return NULL;
+		}
+		
+		mface = CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL, numTessFaces);
 		CustomData_set_layer_flag(&dm->faceData, CD_MFACE, CD_FLAG_TEMPORARY);
 		dm->copyTessFaceArray(dm, mface);
 	}




More information about the Bf-blender-cvs mailing list