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
This commit is contained in:
Philipp Oeser 2020-05-25 11:58:08 +02:00
parent 4b39de677d
commit 20658e6a29
Notes: blender-bot 2023-02-14 08:29:54 +01:00
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
Referenced by issue #77047, Dyntopo Sample detail size on hidden mesh causes crash
1 changed files with 4 additions and 1 deletions

View File

@ -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;
}