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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to