From 49ae632b7d91c069d9b1a8d24f1f758b00218431 Mon Sep 17 00:00:00 2001 From: A Thousand Ships <96648715+AThousandShips@users.noreply.github.com> Date: Fri, 22 Mar 2024 12:37:03 +0100 Subject: [PATCH] Fix import and saving related crashes * Don't add empty mesh to result when importing obj files * Check for null resources in `ResourceSaver` --- core/core_bind.cpp | 2 -- core/io/resource_saver.cpp | 2 ++ editor/import/3d/resource_importer_obj.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/core_bind.cpp b/core/core_bind.cpp index 03c31bee2808..385ddb09f820 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -152,12 +152,10 @@ void ResourceLoader::_bind_methods() { ////// ResourceSaver ////// Error ResourceSaver::save(const Ref &p_resource, const String &p_path, BitField p_flags) { - ERR_FAIL_COND_V_MSG(p_resource.is_null(), ERR_INVALID_PARAMETER, "Can't save empty resource to path '" + p_path + "'."); return ::ResourceSaver::save(p_resource, p_path, p_flags); } Vector ResourceSaver::get_recognized_extensions(const Ref &p_resource) { - ERR_FAIL_COND_V_MSG(p_resource.is_null(), Vector(), "It's not a reference to a valid Resource object."); List exts; ::ResourceSaver::get_recognized_extensions(p_resource, &exts); Vector ret; diff --git a/core/io/resource_saver.cpp b/core/io/resource_saver.cpp index e4022b207388..1dc124535569 100644 --- a/core/io/resource_saver.cpp +++ b/core/io/resource_saver.cpp @@ -98,6 +98,7 @@ void ResourceFormatSaver::_bind_methods() { } Error ResourceSaver::save(const Ref &p_resource, const String &p_path, uint32_t p_flags) { + ERR_FAIL_COND_V_MSG(p_resource.is_null(), ERR_INVALID_PARAMETER, "Can't save empty resource to path '" + p_path + "'."); String path = p_path; if (path.is_empty()) { path = p_resource->get_path(); @@ -174,6 +175,7 @@ void ResourceSaver::set_save_callback(ResourceSavedCallback p_callback) { } void ResourceSaver::get_recognized_extensions(const Ref &p_resource, List *p_extensions) { + ERR_FAIL_COND_MSG(p_resource.is_null(), "It's not a reference to a valid Resource object."); for (int i = 0; i < saver_count; i++) { saver[i]->get_recognized_extensions(p_resource, p_extensions); } diff --git a/editor/import/3d/resource_importer_obj.cpp b/editor/import/3d/resource_importer_obj.cpp index 242b483b5133..f5bf60175ab8 100644 --- a/editor/import/3d/resource_importer_obj.cpp +++ b/editor/import/3d/resource_importer_obj.cpp @@ -497,7 +497,7 @@ static Error _parse_obj(const String &p_path, List> &r_meshes, } } - if (p_single_mesh) { + if (p_single_mesh && mesh->get_surface_count() > 0) { r_meshes.push_back(mesh); }