diff options
-rw-r--r-- | editor/import/editor_scene_importer_gltf.cpp | 18 | ||||
-rw-r--r-- | modules/bullet/bullet_types_converter.cpp | 14 |
2 files changed, 20 insertions, 12 deletions
diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index 8caa4aeeaf..f4171eda32 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -379,13 +379,21 @@ Error EditorSceneImporterGLTF::_parse_buffers(GLTFState &state, const String &p_ Vector<uint8_t> buffer_data; String uri = buffer["uri"]; - if (uri.findn("data:application/octet-stream;base64") == 0) { - //embedded data + if (uri.begins_with("data:")) { // Embedded data using base64. + // Validate data MIME types and throw an error if it's one we don't know/support. + // Could be an importer bug on our side or a broken glTF file. + // Ref: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#file-extensions-and-mime-types + if (!uri.begins_with("data:application/octet-stream;base64") && + !uri.begins_with("data:application/gltf-buffer;base64") && + !uri.begins_with("data:image/jpeg;base64") && + !uri.begins_with("data:image/png;base64")) { + ERR_PRINT("glTF file contains buffer with an unknown URI data type: " + uri); + } buffer_data = _parse_base64_uri(uri); - } else { - uri = p_base_path.plus_file(uri).replace("\\", "/"); //fix for windows + } else { // Should be a relative file path. + uri = p_base_path.plus_file(uri).replace("\\", "/"); // Fix for Windows. buffer_data = FileAccess::get_file_as_array(uri); - ERR_FAIL_COND_V(buffer.size() == 0, ERR_PARSE_ERROR); + ERR_FAIL_COND_V_MSG(buffer.size() == 0, ERR_PARSE_ERROR, "Couldn't load binary file as an array: " + uri); } ERR_FAIL_COND_V(!buffer.has("byteLength"), ERR_PARSE_ERROR); diff --git a/modules/bullet/bullet_types_converter.cpp b/modules/bullet/bullet_types_converter.cpp index 7ecad9b78a..09b90fe09e 100644 --- a/modules/bullet/bullet_types_converter.cpp +++ b/modules/bullet/bullet_types_converter.cpp @@ -101,9 +101,9 @@ void UNSCALE_BT_BASIS(btTransform &scaledBasis) { btVector3 column2 = basis.getColumn(2); // Check for zero scaling. - if (btFuzzyZero(column0[0])) { - if (btFuzzyZero(column1[1])) { - if (btFuzzyZero(column2[2])) { + if (column0.fuzzyZero()) { + if (column1.fuzzyZero()) { + if (column2.fuzzyZero()) { // All dimensions are fuzzy zero. Create a default basis. column0 = btVector3(1, 0, 0); column1 = btVector3(0, 1, 0); @@ -115,7 +115,7 @@ void UNSCALE_BT_BASIS(btTransform &scaledBasis) { column0 = column1.cross(column2); } } else { // Column 1 scale not fuzzy zero. - if (btFuzzyZero(column2[2])) { + if (column2.fuzzyZero()) { // Create two vectors othogonal to column 1. // Ensure that a default basis is created if column 1 = <0, 1, 0> column0 = btVector3(column1[1], -column1[0], 0); @@ -126,8 +126,8 @@ void UNSCALE_BT_BASIS(btTransform &scaledBasis) { } } } else { // Column 0 scale not fuzzy zero. - if (btFuzzyZero(column1[1])) { - if (btFuzzyZero(column2[2])) { + if (column1.fuzzyZero()) { + if (column2.fuzzyZero()) { // Create two vectors orthogonal to column 0. // Ensure that a default basis is created if column 0 = <1, 0, 0> column2 = btVector3(-column0[2], 0, column0[0]); @@ -137,7 +137,7 @@ void UNSCALE_BT_BASIS(btTransform &scaledBasis) { column1 = column2.cross(column0); } } else { // Column 0 and column 1 scales not fuzzy zero. - if (btFuzzyZero(column2[2])) { + if (column2.fuzzyZero()) { // Create column 2 orthogonal to column 0 and column 1. column2 = column0.cross(column1); } |