[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43955] branches/bmesh/blender/source/ blender/bmesh/intern/bmesh_operators.c: make clear_flag_layer() validate index arrays.
Campbell Barton
ideasman42 at gmail.com
Tue Feb 7 15:45:23 CET 2012
Revision: 43955
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43955
Author: campbellbarton
Date: 2012-02-07 14:45:18 +0000 (Tue, 07 Feb 2012)
Log Message:
-----------
make clear_flag_layer() validate index arrays.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c 2012-02-07 14:27:08 UTC (rev 43954)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c 2012-02-07 14:45:18 UTC (rev 43955)
@@ -933,24 +933,29 @@
static void clear_flag_layer(BMesh *bm)
{
- BMVert *v;
- BMEdge *e;
- BMFace *f;
-
- BMIter verts;
- BMIter edges;
- BMIter faces;
-
+ BMHeader *ele;
+ /* set the index values since we are looping over all data anyway,
+ * may save time later on */
+ int i;
+
+ BMIter iter;
+ const int totflags_offset = bm->totflags - 1;
+
/* now go through and memcpy all the flag */
- for (v = BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm); v; v = BMIter_Step(&verts)) {
- memset(v->head.flags + (bm->totflags - 1), 0, sizeof(BMFlagLayer));
+ for (ele = BMIter_New(&iter, bm, BM_VERTS_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
+ memset(ele->flags + totflags_offset, 0, sizeof(BMFlagLayer));
+ BM_SetIndex(ele, i); /* set_inline */
}
- for (e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BMIter_Step(&edges)) {
- memset(e->head.flags + (bm->totflags - 1), 0, sizeof(BMFlagLayer));
+ for (ele = BMIter_New(&iter, bm, BM_EDGES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
+ memset(ele->flags + totflags_offset, 0, sizeof(BMFlagLayer));
+ BM_SetIndex(ele, i); /* set_inline */
}
- for (f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BMIter_Step(&faces)) {
- memset(f->head.flags + (bm->totflags - 1), 0, sizeof(BMFlagLayer));
+ for (ele = BMIter_New(&iter, bm, BM_FACES_OF_MESH, bm), i = 0; ele; ele = BMIter_Step(&iter), i++) {
+ memset(ele->flags + totflags_offset, 0, sizeof(BMFlagLayer));
+ BM_SetIndex(ele, i); /* set_inline */
}
+
+ bm->elem_index_dirty &= ~(BM_VERT|BM_EDGE|BM_FACE);
}
void *BMO_FirstElem(BMOperator *op, const char *slotname)
More information about the Bf-blender-cvs
mailing list