diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-01-24 12:43:17 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-01-24 12:43:17 +0400 |
commit | 9998d1235bd587690f27675a0e148af23f32efb5 (patch) | |
tree | afd0b0101b0ab924189cb734346ffb9cb4c1f087 /source/blender/modifiers/intern/MOD_boolean_util.c | |
parent | e634cb26074ca3950fe00c1266e87d7d7689be09 (diff) |
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.
Diffstat (limited to 'source/blender/modifiers/intern/MOD_boolean_util.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_boolean_util.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/source/blender/modifiers/intern/MOD_boolean_util.c b/source/blender/modifiers/intern/MOD_boolean_util.c index fa829bcd44b..f6a2e4451b2 100644 --- a/source/blender/modifiers/intern/MOD_boolean_util.c +++ b/source/blender/modifiers/intern/MOD_boolean_util.c @@ -350,7 +350,7 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh( 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 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh( *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 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh( (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) |