diff options
author | Jacques Lucke <jacques@blender.org> | 2022-02-01 19:48:44 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-02-01 19:48:44 +0300 |
commit | 2bd71b49e79325863bfe3c561fa03653231c9914 (patch) | |
tree | d7cca33b60613acb0f600d7cbbeaa7924ad49413 /source | |
parent | e9150ac3176eb46e90afa8fd62b33818e59b8de7 (diff) |
Fix T95395: dangling parent pointer when creating node group
Differential Revision: https://developer.blender.org/D13981
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/space_node/node_group.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/editors/space_node/node_group.cc b/source/blender/editors/space_node/node_group.cc index 73e419d667a..3d3f8378916 100644 --- a/source/blender/editors/space_node/node_group.cc +++ b/source/blender/editors/space_node/node_group.cc @@ -776,6 +776,18 @@ static void node_group_make_insert_selected(const bContext &C, bNodeTree &ntree, ListBase anim_basepaths = {nullptr, nullptr}; + /* Detach unselected nodes inside frames when the frame is put into the group. Otherwise the + * `parent` pointer becomes dangling. */ + LISTBASE_FOREACH (bNode *, node, &ntree.nodes) { + if (node->parent == nullptr) { + continue; + } + if (node_group_make_use_node(*node->parent, gnode) && + !node_group_make_use_node(*node, gnode)) { + nodeDetachNode(node); + } + } + /* move nodes over */ LISTBASE_FOREACH_MUTABLE (bNode *, node, &ntree.nodes) { if (node_group_make_use_node(*node, gnode)) { |