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:
authorCampbell Barton <ideasman42@gmail.com>2013-01-29 12:19:23 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-01-29 12:19:23 +0400
commit340845289b6b77c8d1390f237c25ebe46d3b7f30 (patch)
tree0a1396b08052bb228f2d97c703043bc52affdfce /source/blender/editors/transform
parent7834f72282c308dd4927dad97320bccf33115327 (diff)
fix [#34024] delete - Edge loop crash
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r--source/blender/editors/transform/transform.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index e660a43767a..114a8c7a06c 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -5028,6 +5028,7 @@ static int createEdgeSlideVerts(TransInfo *t)
BMEdge *e, *e1;
BMVert *v, *v2;
TransDataEdgeSlideVert *sv_array;
+ int sv_tot;
BMBVHTree *btree;
SmallHash table;
EdgeSlideData *sld = MEM_callocN(sizeof(*sld), "sld");
@@ -5127,10 +5128,10 @@ static int createEdgeSlideVerts(TransInfo *t)
return 0;
}
- sv_array = MEM_callocN(sizeof(TransDataEdgeSlideVert) * j, "sv_array");
+ sv_tot = j;
+ sv_array = MEM_callocN(sizeof(TransDataEdgeSlideVert) * sv_tot, "sv_array");
loop_nr = 0;
- j = 0;
while (1) {
BMLoop *l, *l1, *l2;
BMVert *v_first;
@@ -5190,10 +5191,10 @@ static int createEdgeSlideVerts(TransInfo *t)
/*iterate over the loop*/
v_first = v;
do {
- TransDataEdgeSlideVert *sv = sv_array + j;
-
- BLI_assert(j < MEM_allocN_len(sv_array) / sizeof(*sv));
+ TransDataEdgeSlideVert *sv;
+ /* XXX, 'sv' will initialize multiple times, this is suspicious. see [#34024] */
+ sv = sv_array + GET_INT_FROM_POINTER(BLI_smallhash_lookup(&table, (uintptr_t)v));
sv->v = v;
sv->origvert = *v;
sv->loop_nr = loop_nr;
@@ -5215,11 +5216,7 @@ static int createEdgeSlideVerts(TransInfo *t)
e1 = e;
e = get_other_edge(v, e);
if (!e) {
- //v2=v, v = BM_edge_other_vert(l1->e, v);
-
- BLI_assert(j + 1 < MEM_allocN_len(sv_array) / sizeof(*sv));
-
- sv = sv_array + j + 1;
+ sv = sv_array + GET_INT_FROM_POINTER(BLI_smallhash_lookup(&table, (uintptr_t)v));
sv->v = v;
sv->origvert = *v;
sv->loop_nr = loop_nr;
@@ -5236,16 +5233,13 @@ static int createEdgeSlideVerts(TransInfo *t)
BM_elem_flag_disable(v, BM_ELEM_TAG);
BM_elem_flag_disable(v2, BM_ELEM_TAG);
-
- j += 2;
+
break;
}
l1 = get_next_loop(v, l1, e1, e, vec);
l2 = l2 ? get_next_loop(v, l2, e1, e, vec2) : NULL;
- j += 1;
-
BM_elem_flag_disable(v, BM_ELEM_TAG);
BM_elem_flag_disable(v2, BM_ELEM_TAG);
} while (e != v_first->e && l1);
@@ -5256,7 +5250,7 @@ static int createEdgeSlideVerts(TransInfo *t)
/* EDBM_flag_disable_all(em, BM_ELEM_SELECT); */
sld->sv = sv_array;
- sld->totsv = j;
+ sld->totsv = sv_tot;
/* find mouse vectors, the global one, and one per loop in case we have
* multiple loops selected, in case they are oriented different */