Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-01-24 12:43:17 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-01-24 12:43:17 +0400
commit9998d1235bd587690f27675a0e148af23f32efb5 (patch)
treeafd0b0101b0ab924189cb734346ffb9cb4c1f087 /source/blender/modifiers/intern/MOD_boolean_util.c
parente634cb26074ca3950fe00c1266e87d7d7689be09 (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.c7
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)