mirror of
https://github.com/godotengine/godot.git
synced 2024-11-22 20:23:53 +00:00
PackedScene: Prevent crash when root node has parent
attribute
The crash happens further down when setting an invalid owner in
`Node::_set_owner_nocheck` but I couldn't figure out how to fix it.
But here the proper fix is to catch the invalid scene file early on
and fail loading it.
Part of #17372.
(cherry picked from commit c080ec5da2
)
This commit is contained in:
parent
1a1c30702d
commit
f3fcdfbdd0
@ -3426,13 +3426,13 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
|
||||
if (!new_scene) {
|
||||
|
||||
sdata.unref();
|
||||
_dialog_display_load_error(lpath, ERR_FILE_NOT_FOUND);
|
||||
_dialog_display_load_error(lpath, ERR_FILE_CORRUPT);
|
||||
opening_prev = false;
|
||||
if (prev != -1) {
|
||||
set_current_scene(prev);
|
||||
editor_data.remove_scene(idx);
|
||||
}
|
||||
return ERR_FILE_NOT_FOUND;
|
||||
return ERR_FILE_CORRUPT;
|
||||
}
|
||||
|
||||
if (p_set_inherited) {
|
||||
|
@ -101,6 +101,9 @@ Node *SceneState::instance(GenEditState p_edit_state) const {
|
||||
}
|
||||
#endif
|
||||
parent = nparent;
|
||||
} else {
|
||||
// i == 0 is root node. Confirm that it doesn't have a parent defined.
|
||||
ERR_FAIL_COND_V_MSG(n.parent != -1, nullptr, vformat("Invalid scene: root node %s cannot specify a parent node.", snames[n.name]));
|
||||
}
|
||||
|
||||
Node *node = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user