Commit: 36ae6e66c1068b5579c725c3353d39afe96c9d29 Author: Philipp Oeser Date: Mon Jan 4 14:14:13 2021 +0100 Branches: master https://developer.blender.org/rB36ae6e66c1068b5579c725c3353d39afe96c9d29
Fix T84367: Fix crash when showing invalid/legacy constraints Exposed by rBeaa44afe703e. Definition for CONSTRAINT_TYPE_NULL is not totally clear (it is set for constraints without data, see an old comment from Ton), but for these, a TypeInfo cannot be fetched. Avoid processing those constraints in UI code, just do nothing instead. Maniphest Tasks: T84367 Differential Revision: https://developer.blender.org/D9987 =================================================================== M source/blender/editors/interface/interface_templates.c =================================================================== diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index a035ab86579..e9a6809f170 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -2301,6 +2301,11 @@ static void object_constraint_panel_id(void *md_link, char *r_name) bConstraint *con = (bConstraint *)md_link; const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_from_type(con->type); + /* Cannot get TypeInfo for invalid/legacy constraints. */ + if (cti == NULL) { + return; + } + strcpy(r_name, CONSTRAINT_TYPE_PANEL_PREFIX); strcat(r_name, cti->structName); } @@ -2310,6 +2315,11 @@ static void bone_constraint_panel_id(void *md_link, char *r_name) bConstraint *con = (bConstraint *)md_link; const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_from_type(con->type); + /* Cannot get TypeInfo for invalid/legacy constraints. */ + if (cti == NULL) { + return; + } + strcpy(r_name, CONSTRAINT_BONE_TYPE_PANEL_PREFIX); strcat(r_name, cti->structName); } @@ -2340,6 +2350,10 @@ void uiTemplateConstraints(uiLayout *UNUSED(layout), bContext *C, bool use_bone_ UI_panels_free_instanced(C, region); bConstraint *con = (constraints == NULL) ? NULL : constraints->first; for (int i = 0; con; i++, con = con->next) { + /* Dont show invalid/legacy constraints. */ + if (con->type == CONSTRAINT_TYPE_NULL) { + continue; + } /* Dont show temporary constraints (AutoIK and targetless IK constraints). */ if (con->type == CONSTRAINT_TYPE_KINEMATIC) { bKinematicConstraint *data = con->data; @@ -2369,6 +2383,10 @@ void uiTemplateConstraints(uiLayout *UNUSED(layout), bContext *C, bool use_bone_ /* Assuming there's only one group of instanced panels, update the custom data pointers. */ Panel *panel = region->panels.first; LISTBASE_FOREACH (bConstraint *, con, constraints) { + /* Dont show invalid/legacy constraints. */ + if (con->type == CONSTRAINT_TYPE_NULL) { + continue; + } /* Dont show temporary constraints (AutoIK and targetless IK constraints). */ if (con->type == CONSTRAINT_TYPE_KINEMATIC) { bKinematicConstraint *data = con->data; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs