Merge pull request #33204 from akien-mga/prevent-crash-permission-issue
Prevent crash when we can't write to editor cache or config path
This commit is contained in:
commit
b4737877f1
@ -325,14 +325,12 @@ void EditorFileSystem::_save_filesystem_cache() {
|
|||||||
String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(CACHE_FILE_NAME);
|
String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(CACHE_FILE_NAME);
|
||||||
|
|
||||||
FileAccess *f = FileAccess::open(fscache, FileAccess::WRITE);
|
FileAccess *f = FileAccess::open(fscache, FileAccess::WRITE);
|
||||||
if (f == NULL) {
|
ERR_FAIL_COND_MSG(!f, "Cannot create file '" + fscache + "'. Check user write permissions.");
|
||||||
ERR_PRINTS("Error writing fscache '" + fscache + "'.");
|
|
||||||
} else {
|
f->store_line(filesystem_settings_version_for_import);
|
||||||
f->store_line(filesystem_settings_version_for_import);
|
_save_filesystem_cache(filesystem, f);
|
||||||
_save_filesystem_cache(filesystem, f);
|
f->close();
|
||||||
f->close();
|
memdelete(f);
|
||||||
memdelete(f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorFileSystem::_thread_func(void *_userdata) {
|
void EditorFileSystem::_thread_func(void *_userdata) {
|
||||||
@ -1373,6 +1371,7 @@ void EditorFileSystem::_save_late_updated_files() {
|
|||||||
//files that already existed, and were modified, need re-scanning for dependencies upon project restart. This is done via saving this special file
|
//files that already existed, and were modified, need re-scanning for dependencies upon project restart. This is done via saving this special file
|
||||||
String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file("filesystem_update4");
|
String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file("filesystem_update4");
|
||||||
FileAccessRef f = FileAccess::open(fscache, FileAccess::WRITE);
|
FileAccessRef f = FileAccess::open(fscache, FileAccess::WRITE);
|
||||||
|
ERR_FAIL_COND_MSG(!f, "Cannot create file '" + fscache + "'. Check user write permissions.");
|
||||||
for (Set<String>::Element *E = late_update_files.front(); E; E = E->next()) {
|
for (Set<String>::Element *E = late_update_files.front(); E; E = E->next()) {
|
||||||
f->store_line(E->get());
|
f->store_line(E->get());
|
||||||
}
|
}
|
||||||
|
@ -201,9 +201,8 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref<
|
|||||||
if (has_small_texture) {
|
if (has_small_texture) {
|
||||||
ResourceSaver::save(cache_base + "_small.png", r_small_texture);
|
ResourceSaver::save(cache_base + "_small.png", r_small_texture);
|
||||||
}
|
}
|
||||||
Error err;
|
FileAccess *f = FileAccess::open(cache_base + ".txt", FileAccess::WRITE);
|
||||||
FileAccess *f = FileAccess::open(cache_base + ".txt", FileAccess::WRITE, &err);
|
ERR_FAIL_COND_MSG(!f, "Cannot create file '" + cache_base + ".txt'. Check user write permissions.");
|
||||||
ERR_FAIL_COND_MSG(err != OK, "Cannot create file '" + cache_base + ".txt'.");
|
|
||||||
f->store_line(itos(thumbnail_size));
|
f->store_line(itos(thumbnail_size));
|
||||||
f->store_line(itos(has_small_texture));
|
f->store_line(itos(has_small_texture));
|
||||||
f->store_line(itos(FileAccess::get_modified_time(p_item.path)));
|
f->store_line(itos(FileAccess::get_modified_time(p_item.path)));
|
||||||
@ -295,11 +294,17 @@ void EditorResourcePreview::_thread() {
|
|||||||
//update modified time
|
//update modified time
|
||||||
|
|
||||||
f = FileAccess::open(file, FileAccess::WRITE);
|
f = FileAccess::open(file, FileAccess::WRITE);
|
||||||
f->store_line(itos(thumbnail_size));
|
if (!f) {
|
||||||
f->store_line(itos(has_small_texture));
|
// Not returning as this would leave the thread hanging and would require
|
||||||
f->store_line(itos(modtime));
|
// some proper cleanup/disabling of resource preview generation.
|
||||||
f->store_line(md5);
|
ERR_PRINTS("Cannot create file '" + file + "'. Check user write permissions.");
|
||||||
memdelete(f);
|
} else {
|
||||||
|
f->store_line(itos(thumbnail_size));
|
||||||
|
f->store_line(itos(has_small_texture));
|
||||||
|
f->store_line(itos(modtime));
|
||||||
|
f->store_line(md5);
|
||||||
|
memdelete(f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
memdelete(f);
|
memdelete(f);
|
||||||
|
Loading…
Reference in New Issue
Block a user