From 83daaf39814cf2ad4c31b0dc52afe582d7e7c4b2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 25 Jul 2025 14:57:15 +1000 Subject: [PATCH] Fix #143161: Armature select crashes with over 65k objects Add null check to resolve crash when a "base" can't be retrieved from the GPU selection index. --- source/blender/editors/space_view3d/view3d_select.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index b50f62bf815..4e0d6ff23b7 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -2747,6 +2747,9 @@ static bool ed_object_select_pick(bContext *C, /* Special case, even when there are no hits, pose logic may de-select all bones. */ ((gpu->hits == 0) && has_pose_old)) { + /* Regarding the `basact` null checks. + * While it's unlikely there are GPU hits *without* `basact` being found, + * it's possible looking up the selection index fails, see: #143161. */ if (basact && (gpu->has_bones && (basact->object->type == OB_CAMERA))) { MovieClip *clip = BKE_object_movieclip_get(scene, basact->object, false); @@ -2768,7 +2771,8 @@ static bool ed_object_select_pick(bContext *C, } } } - else if (ED_armature_pose_select_pick_with_buffer(scene, + else if ((basact || oldbasact) && + ED_armature_pose_select_pick_with_buffer(scene, view_layer, v3d, basact ? basact : (Base *)oldbasact,