Skip to content

Commit e0f17b4

Browse files
committed
Merge pull request #109685 from nikitalita/fix-gltf-infinite-loop
Fix infinite loop in GLTFDocument::_convert_animation_node_track
2 parents aa0c7bb + 32a59bb commit e0f17b4

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
@@ -7788,9 +7788,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
77887788
while (true) {
77897789
Vector3 scale;
77907790
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
7791-
ERR_CONTINUE(err != OK);
7792-
p_gltf_node_track.scale_track.values.push_back(scale);
7793-
p_gltf_node_track.scale_track.times.push_back(time);
7791+
if (err == OK) {
7792+
p_gltf_node_track.scale_track.values.push_back(scale);
7793+
p_gltf_node_track.scale_track.times.push_back(time);
7794+
} else {
7795+
ERR_PRINT(vformat("Error interpolating animation %s scale track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7796+
}
77947797
if (last) {
77957798
break;
77967799
}
@@ -7823,9 +7826,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
78237826
while (true) {
78247827
Vector3 scale;
78257828
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &scale);
7826-
ERR_CONTINUE(err != OK);
7827-
p_gltf_node_track.position_track.values.push_back(scale);
7828-
p_gltf_node_track.position_track.times.push_back(time);
7829+
if (err == OK) {
7830+
p_gltf_node_track.position_track.values.push_back(scale);
7831+
p_gltf_node_track.position_track.times.push_back(time);
7832+
} else {
7833+
ERR_PRINT(vformat("Error interpolating animation %s position track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7834+
}
78297835
if (last) {
78307836
break;
78317837
}
@@ -7858,9 +7864,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
78587864
while (true) {
78597865
Quaternion rotation;
78607866
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
7861-
ERR_CONTINUE(err != OK);
7862-
p_gltf_node_track.rotation_track.values.push_back(rotation);
7863-
p_gltf_node_track.rotation_track.times.push_back(time);
7867+
if (err == OK) {
7868+
p_gltf_node_track.rotation_track.values.push_back(rotation);
7869+
p_gltf_node_track.rotation_track.times.push_back(time);
7870+
} else {
7871+
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));
7872+
}
78647873
if (last) {
78657874
break;
78667875
}
@@ -7900,9 +7909,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
79007909
while (true) {
79017910
Vector3 position;
79027911
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
7903-
ERR_CONTINUE(err != OK);
7904-
p_gltf_node_track.position_track.values.push_back(position);
7905-
p_gltf_node_track.position_track.times.push_back(time);
7912+
if (err == OK) {
7913+
p_gltf_node_track.position_track.values.push_back(position);
7914+
p_gltf_node_track.position_track.times.push_back(time);
7915+
} else {
7916+
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));
7917+
}
79067918
if (last) {
79077919
break;
79087920
}
@@ -7933,9 +7945,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
79337945
while (true) {
79347946
Quaternion rotation;
79357947
Error err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
7936-
ERR_CONTINUE(err != OK);
7937-
p_gltf_node_track.rotation_track.values.push_back(rotation);
7938-
p_gltf_node_track.rotation_track.times.push_back(time);
7948+
if (err == OK) {
7949+
p_gltf_node_track.rotation_track.values.push_back(rotation);
7950+
p_gltf_node_track.rotation_track.times.push_back(time);
7951+
} else {
7952+
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));
7953+
}
79397954
if (last) {
79407955
break;
79417956
}
@@ -7976,9 +7991,12 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
79767991
while (true) {
79777992
Vector3 scale;
79787993
Error err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
7979-
ERR_CONTINUE(err != OK);
7980-
p_gltf_node_track.scale_track.values.push_back(scale);
7981-
p_gltf_node_track.scale_track.times.push_back(time);
7994+
if (err == OK) {
7995+
p_gltf_node_track.scale_track.values.push_back(scale);
7996+
p_gltf_node_track.scale_track.times.push_back(time);
7997+
} else {
7998+
ERR_PRINT(vformat("Error interpolating animation %s scale track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
7999+
}
79828000
if (last) {
79838001
break;
79848002
}
@@ -8021,17 +8039,22 @@ bool GLTFDocument::_convert_animation_node_track(Ref<GLTFState> p_state, GLTFAni
80218039
Quaternion rotation;
80228040
Vector3 scale;
80238041
Error err = p_godot_animation->try_position_track_interpolate(p_godot_anim_track_index, time, &position);
8024-
ERR_CONTINUE(err != OK);
8025-
err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
8026-
ERR_CONTINUE(err != OK);
8027-
err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
8028-
ERR_CONTINUE(err != OK);
8029-
p_gltf_node_track.position_track.values.push_back(position);
8030-
p_gltf_node_track.position_track.times.push_back(time);
8031-
p_gltf_node_track.rotation_track.values.push_back(rotation);
8032-
p_gltf_node_track.rotation_track.times.push_back(time);
8033-
p_gltf_node_track.scale_track.values.push_back(scale);
8034-
p_gltf_node_track.scale_track.times.push_back(time);
8042+
if (err == OK) {
8043+
err = p_godot_animation->try_rotation_track_interpolate(p_godot_anim_track_index, time, &rotation);
8044+
if (err == OK) {
8045+
err = p_godot_animation->try_scale_track_interpolate(p_godot_anim_track_index, time, &scale);
8046+
}
8047+
}
8048+
if (err == OK) {
8049+
p_gltf_node_track.position_track.values.push_back(position);
8050+
p_gltf_node_track.position_track.times.push_back(time);
8051+
p_gltf_node_track.rotation_track.values.push_back(rotation);
8052+
p_gltf_node_track.rotation_track.times.push_back(time);
8053+
p_gltf_node_track.scale_track.values.push_back(scale);
8054+
p_gltf_node_track.scale_track.times.push_back(time);
8055+
} else {
8056+
ERR_PRINT(vformat("Error interpolating animation %s transform track %d at time %f", p_godot_animation->get_name(), p_godot_anim_track_index, time));
8057+
}
80358058
if (last) {
80368059
break;
80378060
}

0 commit comments

Comments
 (0)