diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-11-28 12:27:15 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-11-28 12:27:23 +0100 |
commit | a3632694794ae78ce36302e4eac672caf771a607 (patch) | |
tree | bc8f075d05b38551aaaebb15b7ab96086a82a932 | |
parent | f82bf35a03502b33e0b3a5987573e3c6987912ce (diff) | |
download | redot-engine-a3632694794ae78ce36302e4eac672caf771a607.tar.gz |
AnimationMixer: Validate ObjectID before blend in case the object was freed
Works around #85365, but it's likely only a partial fix.
The proper fix would be to remove the Object pointer from the TrackCache
and always go back to the ObjectID before doing operations like this.
-rw-r--r-- | scene/animation/animation_mixer.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/scene/animation/animation_mixer.cpp b/scene/animation/animation_mixer.cpp index 479311e966..bba3dc6d7d 100644 --- a/scene/animation/animation_mixer.cpp +++ b/scene/animation/animation_mixer.cpp @@ -1708,7 +1708,12 @@ void AnimationMixer::_blend_apply() { } } } - t->object->set_indexed(t->subpath, Animation::cast_from_blendwise(t->value, t->init_value.get_type())); + + // t->object isn't safe here, get instance from id (GH-85365). + Object *obj = ObjectDB::get_instance(t->object_id); + if (obj) { + obj->set_indexed(t->subpath, Animation::cast_from_blendwise(t->value, t->init_value.get_type())); + } } break; case Animation::TYPE_BEZIER: { |