From f7eb7ced588ff1e86303665fee12119236b4d980 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Fri, 22 Sep 2023 12:25:07 -0400 Subject: [PATCH] Fix: Crashes in geometry nodes group data-block polls `geometry_node_asset_traits` can be null, that means none of the flags are set. --- source/blender/makesrna/intern/rna_modifier.cc | 8 ++++++-- source/blender/makesrna/intern/rna_space.cc | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/source/blender/makesrna/intern/rna_modifier.cc b/source/blender/makesrna/intern/rna_modifier.cc index 954f637c4c6..dfc026c5c33 100644 --- a/source/blender/makesrna/intern/rna_modifier.cc +++ b/source/blender/makesrna/intern/rna_modifier.cc @@ -1680,12 +1680,16 @@ static bool rna_NodesModifier_node_group_poll(PointerRNA * /*ptr*/, PointerRNA v return false; } if (ntree->id.asset_data) { - if ((ntree->geometry_node_asset_traits->flag & GEO_NODE_ASSET_MODIFIER) == 0) { + if (!ntree->geometry_node_asset_traits || + (ntree->geometry_node_asset_traits->flag & GEO_NODE_ASSET_MODIFIER) == 0) + { /* Only node group assets specically marked as modifiers can be modifiers. */ return false; } } - if (ntree->geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) { + if (ntree->geometry_node_asset_traits && + ntree->geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) + { /* Tool node groups cannot be modifiers. */ return false; } diff --git a/source/blender/makesrna/intern/rna_space.cc b/source/blender/makesrna/intern/rna_space.cc index 5418934bccf..3831b538b3d 100644 --- a/source/blender/makesrna/intern/rna_space.cc +++ b/source/blender/makesrna/intern/rna_space.cc @@ -2517,13 +2517,17 @@ static bool space_node_node_geometry_nodes_tool_poll(const SpaceNode &snode, /* Only assets can be tools. */ return false; } - if ((ntree.geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) == 0) { + if (!ntree.geometry_node_asset_traits || + (ntree.geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) == 0) + { /* Only node groups specifically marked as tools can be tools. */ return false; } } else { - if (ntree.geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) { + if (ntree.geometry_node_asset_traits && + ntree.geometry_node_asset_traits->flag & GEO_NODE_ASSET_TOOL) + { /* Tool node groups cannot be modifiers. */ return false; }