diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-04-03 06:52:34 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-04-03 06:52:34 +0400 |
commit | d98c1770f9be7a384676076a39df3426ec01ebb4 (patch) | |
tree | 6c30f12fe1de59b8d278aba7f8f00fa17966b5e9 /source/blender/editors/transform | |
parent | 817a407a62df5b79bf2a12d87ccbd0bc7e12d56c (diff) |
patch [#30780] Transform operator leak in aborted edge slide mode
from Francisco De La Cruz (xercesblue)
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r-- | source/blender/editors/transform/transform.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 71bca7bfce8..f2e2d5dd281 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4402,7 +4402,7 @@ static int createSlideVerts(TransInfo *t) int numsel, i, j; if (!v3d) { - /*ok, let's try to survive this*/ + /* ok, let's try to survive this */ unit_m4(projectMat); } else { @@ -4428,15 +4428,20 @@ static int createSlideVerts(TransInfo *t) } if (numsel == 0 || numsel > 2) { - return 0; //invalid edge selection + MEM_freeN(sld); + BMBVH_FreeBVH(btree); + return 0; /* invalid edge selection */ } } } BM_ITER(e, &iter, em->bm, BM_EDGES_OF_MESH, NULL) { if (BM_elem_flag_test(e, BM_ELEM_SELECT)) { - if (BM_edge_face_count(e) != 2) - return 0; //can only handle exactly 2 faces around each edge + if (BM_edge_face_count(e) != 2) { + MEM_freeN(sld); + BMBVH_FreeBVH(btree); + return 0; /* can only handle exactly 2 faces around each edge */ + } } } @@ -4452,8 +4457,11 @@ static int createSlideVerts(TransInfo *t) } } - if (!j) + if (!j) { + MEM_freeN(sld); + BMBVH_FreeBVH(btree); return 0; + } tempsv = MEM_callocN(sizeof(TransDataSlideVert)*j, "tempsv"); |