[Bf-blender-cvs] [20658e6a29b] master: Fix T77047: Dyntopo Sample detail size on hidden mesh causes crash

Philipp Oeser noreply at git.blender.org
Wed Jun 10 18:47:35 CEST 2020


Commit: 20658e6a29bd33264d99fcee9cea1886d1c9d0c9
Author: Philipp Oeser
Date:   Mon May 25 11:58:08 2020 +0200
Branches: master
https://developer.blender.org/rB20658e6a29bd33264d99fcee9cea1886d1c9d0c9

Fix T77047: Dyntopo Sample detail size on hidden mesh causes crash

The `Toolbar` and `Sidebar` hide the corresponding panel
`VIEW3D_PT_sculpt_dyntopo` by polling for context.sculpt_object and
context.tool_settings.sculpt. In the Active Tool in the Properties
Editor this poll does not return False though, thus the
sample_detail_size is possible from there.

Second security check (the operator poll `SCULPT_mode_poll`) checks the
active object -- that is still valid even if hidden, so we are allowed
to execute the operator. However the active object becomes NULL once the
area is switched in `sample_detail()` -- see `CTX_wm_area_set`), leading
to the crash.

Dont think there is a quick and easy way to do this in the poll from the
Properties Editor, so just check for a valid active abject in the
operator and return OPERATOR_CANCELLED if we dont have it.

Maniphest Tasks: T77047

Differential Revision: https://developer.blender.org/D7832

===================================================================

M	source/blender/editors/sculpt_paint/sculpt_detail.c

===================================================================

diff --git a/source/blender/editors/sculpt_paint/sculpt_detail.c b/source/blender/editors/sculpt_paint/sculpt_detail.c
index b7d1cd8c005..f071deaa219 100644
--- a/source/blender/editors/sculpt_paint/sculpt_detail.c
+++ b/source/blender/editors/sculpt_paint/sculpt_detail.c
@@ -259,8 +259,11 @@ static int sample_detail(bContext *C, int mx, int my, int mode)
   ED_view3d_viewcontext_init(C, &vc, depsgraph);
 
   Object *ob = vc.obact;
-  SculptSession *ss = ob->sculpt;
+  if (ob == NULL) {
+    return OPERATOR_CANCELLED;
+  }
 
+  SculptSession *ss = ob->sculpt;
   if (!ss->pbvh) {
     return OPERATOR_CANCELLED;
   }



More information about the Bf-blender-cvs mailing list