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:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-05-24 23:41:09 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-05-24 23:41:09 +0400
commit75a8de49fc897e3d1076e2121e018ae8cb7c2cbb (patch)
treec9bcd26d16cfdf29081a0579a26265ffbc1d768c /source/blender/modifiers
parent8042c52fb6460cecbf4e8d580f21e8a2d759687e (diff)
Fix bug #31582, Crash with Skin modifier
Buffer overflow error in collecting split_face vertices.
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r--source/blender/modifiers/intern/MOD_skin.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/source/blender/modifiers/intern/MOD_skin.c b/source/blender/modifiers/intern/MOD_skin.c
index a13bc3563c5..e3a4ff17d7c 100644
--- a/source/blender/modifiers/intern/MOD_skin.c
+++ b/source/blender/modifiers/intern/MOD_skin.c
@@ -1173,9 +1173,9 @@ static void skin_fix_hole_no_good_verts(BMesh *bm, Frame *frame, BMFace *split_f
BLI_assert(split_face->len >= 3);
/* Extrude the split face */
- BMO_mesh_flag_disable_all(bm, NULL, BM_FACE, 1);
- BMO_elem_flag_enable(bm, split_face, 1);
- BMO_op_initf(bm, &op, "extrude_face_indiv faces=%ff", 1);
+ BM_mesh_elem_hflag_disable_all(bm, BM_FACE, BM_ELEM_TAG, FALSE);
+ BM_elem_flag_enable(split_face, BM_ELEM_TAG);
+ BMO_op_initf(bm, &op, "extrude_face_indiv faces=%hf", BM_ELEM_TAG);
BMO_op_exec(bm, &op);
/* Update split face (should only be one new face created
@@ -1194,10 +1194,12 @@ static void skin_fix_hole_no_good_verts(BMesh *bm, Frame *frame, BMFace *split_f
/* Need at least four ring edges, so subdivide longest edge if
* face is a triangle */
longest_edge = BM_face_find_longest_edge(split_face);
- BMO_mesh_flag_disable_all(bm, NULL, BM_EDGE, 1);
- BMO_elem_flag_enable(bm, longest_edge, 1);
- BMO_op_callf(bm, "esubd edges=%fe numcuts=%i quadcornertype=%i",
- 1, 1, SUBD_STRAIGHT_CUT);
+
+ BM_mesh_elem_hflag_disable_all(bm, BM_EDGE, BM_ELEM_TAG, FALSE);
+ BM_elem_flag_enable(longest_edge, BM_ELEM_TAG);
+
+ BMO_op_callf(bm, "esubd edges=%he numcuts=%i quadcornertype=%i",
+ BM_ELEM_TAG, 1, SUBD_STRAIGHT_CUT);
}
else if (split_face->len > 4) {
/* Maintain a dynamic vert array containing the split_face's
@@ -1209,7 +1211,7 @@ static void skin_fix_hole_no_good_verts(BMesh *bm, Frame *frame, BMFace *split_f
/* Get split face's verts */
BM_iter_as_array(bm, BM_VERTS_OF_FACE, split_face,
- (void **)verts, split_face->len);
+ (void **)vert_buf, split_face->len);
/* Earlier edge split operations may have turned some quads
* into higher-degree faces */