Skip to content

Commit 32a59bb

Browse files
committed
Fix infinite loop in GLTFDocument::_convert_animation_node_track
1 parent 0c51ede commit 32a59bb

File tree

1 file changed

+52
-29
lines changed

1 file changed

+52
-29
lines changed

modules/gltf/gltf_document.cpp

Lines changed: 52 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7782,9 +7782,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
77827782
while (true) {
77837783
Vector3 scale;
77847784
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
7785-
ERR_CONTINUE(err != OK);
7786-
p_gltf_node_track.scale_track.values.push_back(scale);
7787-
p_gltf_node_track.scale_track.times.push_back(time);
7785+
if (err == OK) {
7786+
p_gltf_node_track.scale_track.values.push_back(scale);
7787+
p_gltf_node_track.scale_track.times.push_back(time);
7788+
} else {
7789+
ERR_PRINT(vformat("Error interpolating animation %s scale track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7790+
}
77887791
if (last) {
77897792
break;
77907793
}
@@ -7817,9 +7820,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
78177820
while (true) {
78187821
Vector3 scale;
78197822
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &scale);
7820-
ERR_CONTINUE(err != OK);
7821-
p_gltf_node_track.position_track.values.push_back(scale);
7822-
p_gltf_node_track.position_track.times.push_back(time);
7823+
if (err == OK) {
7824+
p_gltf_node_track.position_track.values.push_back(scale);
7825+
p_gltf_node_track.position_track.times.push_back(time);
7826+
} else {
7827+
ERR_PRINT(vformat("Error interpolating animation %s position track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7828+
}
78237829
if (last) {
78247830
break;
78257831
}
@@ -7852,9 +7858,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
78527858
while (true) {
78537859
Quaternion rotation;
78547860
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
7855-
ERR_CONTINUE(err != OK);
7856-
p_gltf_node_track.rotation_track.values.push_back(rotation);
7857-
p_gltf_node_track.rotation_track.times.push_back(time);
7861+
if (err == OK) {
7862+
p_gltf_node_track.rotation_track.values.push_back(rotation);
7863+
p_gltf_node_track.rotation_track.times.push_back(time);
7864+
} else {
7865+
ERR_PRINT(vformat("Error interpolating animation %s value rotation track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7866+
}
78587867
if (last) {
78597868
break;
78607869
}
@@ -7894,9 +7903,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
78947903
while (true) {
78957904
Vector3 position;
78967905
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
7897-
ERR_CONTINUE(err != OK);
7898-
p_gltf_node_track.position_track.values.push_back(position);
7899-
p_gltf_node_track.position_track.times.push_back(time);
7906+
if (err == OK) {
7907+
p_gltf_node_track.position_track.values.push_back(position);
7908+
p_gltf_node_track.position_track.times.push_back(time);
7909+
} else {
7910+
ERR_PRINT(vformat("Error interpolating animation %s value position track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7911+
}
79007912
if (last) {
79017913
break;
79027914
}
@@ -7927,9 +7939,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
79277939
while (true) {
79287940
Quaternion rotation;
79297941
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
7930-
ERR_CONTINUE(err != OK);
7931-
p_gltf_node_track.rotation_track.values.push_back(rotation);
7932-
p_gltf_node_track.rotation_track.times.push_back(time);
7942+
if (err == OK) {
7943+
p_gltf_node_track.rotation_track.values.push_back(rotation);
7944+
p_gltf_node_track.rotation_track.times.push_back(time);
7945+
} else {
7946+
ERR_PRINT(vformat("Error interpolating animation %s value rotation track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7947+
}
79337948
if (last) {
79347949
break;
79357950
}
@@ -7970,9 +7985,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
79707985
while (true) {
79717986
Vector3 scale;
79727987
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
7973-
ERR_CONTINUE(err != OK);
7974-
p_gltf_node_track.scale_track.values.push_back(scale);
7975-
p_gltf_node_track.scale_track.times.push_back(time);
7988+
if (err == OK) {
7989+
p_gltf_node_track.scale_track.values.push_back(scale);
7990+
p_gltf_node_track.scale_track.times.push_back(time);
7991+
} else {
7992+
ERR_PRINT(vformat("Error interpolating animation %s scale track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7993+
}
79767994
if (last) {
79777995
break;
79787996
}
@@ -8015,17 +8033,22 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
80158033
Quaternion rotation;
80168034
Vector3 scale;
80178035
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
8018-
ERR_CONTINUE(err != OK);
8019-
err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
8020-
ERR_CONTINUE(err != OK);
8021-
err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
8022-
ERR_CONTINUE(err != OK);
8023-
p_gltf_node_track.position_track.values.push_back(position);
8024-
p_gltf_node_track.position_track.times.push_back(time);
8025-
p_gltf_node_track.rotation_track.values.push_back(rotation);
8026-
p_gltf_node_track.rotation_track.times.push_back(time);
8027-
p_gltf_node_track.scale_track.values.push_back(scale);
8028-
p_gltf_node_track.scale_track.times.push_back(time);
8036+
if (err == OK) {
8037+
err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
8038+
if (err == OK) {
8039+
err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
8040+
}
8041+
}
8042+
if (err == OK) {
8043+
p_gltf_node_track.position_track.values.push_back(position);
8044+
p_gltf_node_track.position_track.times.push_back(time);
8045+
p_gltf_node_track.rotation_track.values.push_back(rotation);
8046+
p_gltf_node_track.rotation_track.times.push_back(time);
8047+
p_gltf_node_track.scale_track.values.push_back(scale);
8048+
p_gltf_node_track.scale_track.times.push_back(time);
8049+
} else {
8050+
ERR_PRINT(vformat("Error interpolating animation %s transform track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
8051+
}
80298052
if (last) {
80308053
break;
80318054
}

0 commit comments

Comments
 (0)