From e949665489416ef948a5ead7e12d3691d78af6f4 Mon Sep 17 00:00:00 2001 From: PouleyKetchoupp Date: Thu, 21 Nov 2019 17:25:01 +0100 Subject: Error instead of crash in gltf import with more than one morph target Redone from PR #33782 to fix the crash without adding compatibility with Blender 2.8 Helps with #16124, while Blender 2.81 has the proper export fix. --- editor/import/editor_scene_importer_gltf.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'editor/import') diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index 30e2aae020..febdc3c63c 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -2357,6 +2357,7 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { const int output = s["output"]; GLTFAnimation::Interpolation interp = GLTFAnimation::INTERP_LINEAR; + int output_count = 1; if (s.has("interpolation")) { const String &in = s["interpolation"]; if (in == "STEP") { @@ -2365,8 +2366,10 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { interp = GLTFAnimation::INTERP_LINEAR; } else if (in == "CATMULLROMSPLINE") { interp = GLTFAnimation::INTERP_CATMULLROMSPLINE; + output_count = 3; } else if (in == "CUBICSPLINE") { interp = GLTFAnimation::INTERP_CUBIC_SPLINE; + output_count = 3; } } @@ -2396,6 +2399,9 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { track->weight_tracks.resize(wc); + const int expected_value_count = times.size() * output_count * wc; + ERR_FAIL_COND_V_MSG(weights.size() != expected_value_count, ERR_PARSE_ERROR, "Invalid weight data, expected " + itos(expected_value_count) + " weight values, got " + itos(weights.size()) + " instead."); + const int wlen = weights.size() / wc; PoolVector::Read r = weights.read(); for (int k = 0; k < wc; k++) { //separate tracks, having them together is not such a good idea -- cgit v1.2.3