2
0
Эх сурвалжийг харах

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.

(cherry picked from commit ea84effb845f7959b2eed362855e5c0e8ab68f20)
Alistair Leslie-Hughes 1 жил өмнө
parent
commit
6777e1b4bf

+ 4 - 3
scene/animation/animation_mixer.cpp

@@ -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();