diff options
author | Campbell Barton <campbell@blender.org> | 2022-05-11 09:19:17 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-05-11 09:28:37 +0300 |
commit | 067f0d40aeebc1eec0ada5a0b3f3bc77af0f32a9 (patch) | |
tree | 6b9099337a368007671eb7044223eb22906b2b8b /source/blender/editors/mesh/editmesh_knife.c | |
parent | b47c5505aa3791639c2bd7d68a95bd1515e606ed (diff) |
Fix knife tool use-after free on completion
Regression in [0] accessed knife data after it had been freed.
[0]: f87029f7b13142499a37fb311a721d99bb1aecd7
Diffstat (limited to 'source/blender/editors/mesh/editmesh_knife.c')
-rw-r--r-- | source/blender/editors/mesh/editmesh_knife.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c index ee40431c101..81cfe4f85f1 100644 --- a/source/blender/editors/mesh/editmesh_knife.c +++ b/source/blender/editors/mesh/editmesh_knife.c @@ -4391,7 +4391,8 @@ static int knifetool_modal(bContext *C, wmOperator *op, const wmEvent *event) ED_workspace_status_text(C, NULL); return OPERATOR_CANCELLED; - case KNF_MODAL_CONFIRM: + case KNF_MODAL_CONFIRM: { + const bool changed = (kcd->totkvert != 0); /* finish */ ED_region_tag_redraw(kcd->region); @@ -4400,11 +4401,11 @@ static int knifetool_modal(bContext *C, wmOperator *op, const wmEvent *event) ED_workspace_status_text(C, NULL); /* Cancel to prevent undo push for empty cuts. */ - if (kcd->totkvert == 0) { + if (!changed) { return OPERATOR_CANCELLED; } - return OPERATOR_FINISHED; + } case KNF_MODAL_UNDO: if (BLI_stack_is_empty(kcd->undostack)) { ED_region_tag_redraw(kcd->region); |