From 937aeda51f66bf023c83d510b09bf52da53ef562 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Thu, 12 May 2022 13:18:12 -0400 Subject: [PATCH] CScriptMidi: Add destructor implementation This ensures currently playing track is stopped, avoiding a UAF in Amuse. --- Runtime/World/CScriptMidi.cpp | 4 ++++ Runtime/World/CScriptMidi.hpp | 1 + 2 files changed, 5 insertions(+) diff --git a/Runtime/World/CScriptMidi.cpp b/Runtime/World/CScriptMidi.cpp index 00b23486a..2991871c8 100644 --- a/Runtime/World/CScriptMidi.cpp +++ b/Runtime/World/CScriptMidi.cpp @@ -16,6 +16,10 @@ CScriptMidi::CScriptMidi(TUniqueId id, const CEntityInfo& info, std::string_view x34_song = g_SimplePool->GetObj(SObjectTag{FOURCC('CSNG'), csng}); } +CScriptMidi::~CScriptMidi() { + StopInternal(0.f); +} + void CScriptMidi::StopInternal(float fadeTime) { if (!x3c_handle) { return; diff --git a/Runtime/World/CScriptMidi.hpp b/Runtime/World/CScriptMidi.hpp index b48200a67..92ca3cd1c 100644 --- a/Runtime/World/CScriptMidi.hpp +++ b/Runtime/World/CScriptMidi.hpp @@ -22,6 +22,7 @@ public: DEFINE_ENTITY CScriptMidi(TUniqueId id, const CEntityInfo& info, std::string_view name, bool active, CAssetId csng, float, float, s32); + ~CScriptMidi() override; void Stop(CStateManager& mgr, float fadeTime); void Play(CStateManager& mgr, float fadeTime);