summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-11-28 12:27:15 +0100
committerRémi Verschelde <rverschelde@gmail.com>2023-11-28 12:27:23 +0100
commita3632694794ae78ce36302e4eac672caf771a607 (patch)
treebc8f075d05b38551aaaebb15b7ab96086a82a932
parentf82bf35a03502b33e0b3a5987573e3c6987912ce (diff)
downloadredot-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.cpp7
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: {