Replace memory allocation point of ValueTrack correctly in AnimationMixer

When a animation track doesn't have an keys, it's possible that we leak memory due the ERR_CONTINUE_MSG macro usage.

By checking the error condition first, we avoid a allocation and thus the leak.
This commit is contained in:
Alistair Leslie-Hughes 2023-11-16 18:47:46 +11:00
parent 0c03d25ba4
commit ea84effb84
1 changed files with 4 additions and 3 deletions

View File

@ -638,6 +638,10 @@ bool AnimationMixer::_update_caches() {
switch (track_type) {
case Animation::TYPE_VALUE: {
// If a value track without a key is cached first, the initial value cannot be determined.
// It is a corner case, but which may cause problems with blending.
ERR_CONTINUE_MSG(anim->track_get_key_count(i) == 0, "AnimationMixer: '" + String(E) + "', Value Track: '" + String(path) + "' must have at least one key to cache for blending.");
TrackCacheValue *track_value = memnew(TrackCacheValue);
if (resource.is_valid()) {
@ -654,9 +658,6 @@ bool AnimationMixer::_update_caches() {
track = track_value;
// If a value track without a key is cached first, the initial value cannot be determined.
// It is a corner case, but which may cause problems with blending.
ERR_CONTINUE_MSG(anim->track_get_key_count(i) == 0, "AnimationMixer: '" + String(E) + "', Value Track: '" + String(path) + "' must have at least one key to cache for blending.");
track_value->init_value = anim->track_get_key_value(i, 0);
track_value->init_value.zero();