Skip to content

Commit 3fac36a

Browse files
akien-mgaRyan-000
authored andcommitted
Merge pull request godotengine#95420 from TokisanGames/fix-crash-selecting-notdescendant
Fix crash by ensuring selected node is a descendant of the edited scene
1 parent d9d23c2 commit 3fac36a

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

editor/plugins/node_3d_editor_plugin.cpp

+11-9
Original file line numberDiff line numberDiff line change
@@ -1064,21 +1064,23 @@ void Node3DEditorViewport::_select_region() {
10641064
if (found_nodes.has(sp)) {
10651065
continue;
10661066
}
1067-
10681067
found_nodes.insert(sp);
10691068

10701069
Node *node = Object::cast_to<Node>(sp);
1070+
1071+
// Selection requires that the node is the edited scene or its descendant, and has an owner.
10711072
if (node != edited_scene) {
1073+
if (!node->get_owner() || !edited_scene->is_ancestor_of(node)) {
1074+
continue;
1075+
}
10721076
node = edited_scene->get_deepest_editable_node(node);
1073-
}
1074-
1075-
// Prevent selection of nodes not owned by the edited scene.
1076-
while (node && node != edited_scene->get_parent()) {
1077-
Node *node_owner = node->get_owner();
1078-
if (node_owner == edited_scene || node == edited_scene || (node_owner != nullptr && edited_scene->is_editable_instance(node_owner))) {
1079-
break;
1077+
while (node != edited_scene) {
1078+
Node *node_owner = node->get_owner();
1079+
if (node_owner == edited_scene || (node_owner != nullptr && edited_scene->is_editable_instance(node_owner))) {
1080+
break;
1081+
}
1082+
node = node->get_parent();
10801083
}
1081-
node = node->get_parent();
10821084
}
10831085

10841086
// Replace the node by the group if grouped

0 commit comments

Comments
 (0)