[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43659] trunk/blender/source/blender/ modifiers/intern/MOD_boolean_util.c: Fix #29965: Crash: Memory psys node array: end corrupt
Sergey Sharybin
sergey.vfx at gmail.com
Tue Jan 24 09:43:33 CET 2012
Revision: 43659
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43659
Author: nazgul
Date: 2012-01-24 08:43:17 +0000 (Tue, 24 Jan 2012)
Log Message:
-----------
Fix #29965: Crash: Memory psys node array: end corrupt
Original indices from right operand were used in boolean result derived mesh
which lead to crash if right operand has got more entities (faces/edges/vertices)
than left operand.
Modified Paths:
--------------
trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c
Modified: trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c 2012-01-24 01:56:44 UTC (rev 43658)
+++ trunk/blender/source/blender/modifiers/intern/MOD_boolean_util.c 2012-01-24 08:43:17 UTC (rev 43659)
@@ -350,7 +350,7 @@
GHash *material_hash = NULL;
Mesh *me1= (Mesh*)ob1->data;
Mesh *me2= (Mesh*)ob2->data;
- int i;
+ int i, *origindex_layer;
// create a new DerivedMesh
result = CDDM_new(vertex_it->num_elements, 0, face_it->num_elements);
@@ -379,6 +379,8 @@
*totmat = 0;
}
+ origindex_layer = result->getFaceDataArray(result, CD_ORIGINDEX);
+
// step through the face iterators
for(i = 0; !face_it->Done(face_it->it); i++) {
Mesh *orig_me;
@@ -427,6 +429,9 @@
(orig_me == me2)? mapmat: NULL);
test_index_face(mface, &result->faceData, i, csgface.vertex_number);
+
+ if(origindex_layer && orig_ob == ob2)
+ origindex_layer[i] = ORIGINDEX_NONE;
}
if (material_hash)
More information about the Bf-blender-cvs
mailing list