From c4701a027fed83d2aea4f0f26a845e4d6852b1ff Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Fri, 3 Jun 2022 13:10:36 +1000 Subject: Fix T98558: island selection in UV editor can crash Regression in [0]. When zoomed in, we can be within the face of an island but too far from an edge, in this case uv_find_nearest_face_multi_ex is used instead of uv_find_nearest_edge_multi with the consequence that hit.l cannot be used in uvedit_uv_select_test (it is NULL). Instead, use uvedit_face_select_test instead in this case. [0]: d356edf420ba13b3a544dcc598a0e31a36e1d86c Reviewed By: campbellbarton Ref D15100 --- source/blender/editors/uvedit/uvedit_select.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c index 6405d2df66a..a999c9b491f 100644 --- a/source/blender/editors/uvedit/uvedit_select.c +++ b/source/blender/editors/uvedit/uvedit_select.c @@ -2493,8 +2493,15 @@ static bool uv_mouse_select_multi(bContext *C, else if (selectmode == UV_SELECT_EDGE) { is_selected = uvedit_edge_select_test(scene, hit.l, cd_loop_uv_offset); } - else { /* Vertex or island. */ - is_selected = uvedit_uv_select_test(scene, hit.l, cd_loop_uv_offset); + else { + /* Vertex or island. For island (if we were using #uv_find_nearest_face_multi_ex, see above), + * `hit.l` is NULL, use `hit.efa` instead. */ + if (hit.l != NULL) { + is_selected = uvedit_uv_select_test(scene, hit.l, cd_loop_uv_offset); + } + else { + is_selected = uvedit_face_select_test(scene, hit.efa, cd_loop_uv_offset); + } } } -- cgit v1.2.3