1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-11 13:10:58 +00:00

Fix Project Manager hard crashes due to invalid access to Editor Nodes

This commit is contained in:
Marios Staikopoulos
2022-04-05 10:09:52 -07:00
parent 77843355a0
commit da2b5da0c5
3 changed files with 19 additions and 14 deletions

View File

@@ -156,15 +156,18 @@ void EditorDirDialog::_make_dir_confirm() {
String dir = ti->get_metadata(0); String dir = ti->get_metadata(0);
if (EditorFileSystem::get_singleton()->get_filesystem_path(dir + makedirname->get_text())) { DirAccessRef d = DirAccess::open(dir);
ERR_FAIL_COND_MSG(!d, "Cannot open directory '" + dir + "'.");
const String stripped_dirname = makedirname->get_text().strip_edges();
if (d->dir_exists(stripped_dirname)) {
mkdirerr->set_text(TTR("Could not create folder. File with that name already exists.")); mkdirerr->set_text(TTR("Could not create folder. File with that name already exists."));
mkdirerr->popup_centered(); mkdirerr->popup_centered();
return; return;
} }
DirAccessRef d = DirAccess::open(dir); Error err = d->make_dir(stripped_dirname);
ERR_FAIL_COND_MSG(!d, "Cannot open directory '" + dir + "'.");
Error err = d->make_dir(makedirname->get_text());
if (err != OK) { if (err != OK) {
mkdirerr->popup_centered(Size2(250, 80) * EDSCALE); mkdirerr->popup_centered(Size2(250, 80) * EDSCALE);
} else { } else {

View File

@@ -1099,16 +1099,18 @@ EditorFileDialog::Access EditorFileDialog::get_access() const {
} }
void EditorFileDialog::_make_dir_confirm() { void EditorFileDialog::_make_dir_confirm() {
if (EditorFileSystem::get_singleton()->get_filesystem_path(makedirname->get_text().strip_edges())) { const String stripped_dirname = makedirname->get_text().strip_edges();
if (dir_access->dir_exists(stripped_dirname)) {
error_dialog->set_text(TTR("Could not create folder. File with that name already exists.")); error_dialog->set_text(TTR("Could not create folder. File with that name already exists."));
error_dialog->popup_centered(Size2(250, 50) * EDSCALE); error_dialog->popup_centered(Size2(250, 50) * EDSCALE);
makedirname->set_text(""); // Reset label. makedirname->set_text(""); // Reset label.
return; return;
} }
Error err = dir_access->make_dir(makedirname->get_text().strip_edges()); Error err = dir_access->make_dir(stripped_dirname);
if (err == OK) { if (err == OK) {
dir_access->change_dir(makedirname->get_text().strip_edges()); dir_access->change_dir(stripped_dirname);
invalidate(); invalidate();
update_filters(); update_filters();
update_dir(); update_dir();

View File

@@ -1427,17 +1427,17 @@ void FileSystemDock::_make_dir_confirm() {
directory = directory.get_base_dir(); directory = directory.get_base_dir();
} }
if (EditorFileSystem::get_singleton()->get_filesystem_path(directory + dir_name)) { print_verbose("Making folder " + dir_name + " in " + directory);
DirAccessRef da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
Error err = da->change_dir(directory);
ERR_FAIL_COND_MSG(err != OK, "Cannot open directory '" + directory + "'.");
if (da->dir_exists(directory)) {
EditorNode::get_singleton()->show_warning(TTR("Could not create folder. File with that name already exists.")); EditorNode::get_singleton()->show_warning(TTR("Could not create folder. File with that name already exists."));
return; return;
} }
print_verbose("Making folder " + dir_name + " in " + directory); err = da->make_dir(dir_name);
DirAccessRef da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
Error err = da->change_dir(directory);
if (err == OK) {
err = da->make_dir(dir_name);
}
if (err == OK) { if (err == OK) {
print_verbose("FileSystem: calling rescan."); print_verbose("FileSystem: calling rescan.");