From a5b46f7676466e0e2f08e64197cba4d5b28876eb Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 20 Jul 2025 21:09:43 +1000 Subject: [PATCH] MediaCapture: Fix use-after-free when starting --- src/util/media_capture.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/util/media_capture.cpp b/src/util/media_capture.cpp index f6bc1da62..4499338e2 100644 --- a/src/util/media_capture.cpp +++ b/src/util/media_capture.cpp @@ -1117,13 +1117,6 @@ MediaCaptureMF::CreateVideoEncodeTransform(std::string_view codec, u32 frame_rat ComPtr transform; hr = transforms[0]->ActivateObject(IID_PPV_ARGS(transform.GetAddressOf())); if (transforms) - wrap_MFHeapFree(transforms); - if (FAILED(hr)) [[unlikely]] - { - Error::SetHResult(error, "Encoder ActivateObject() failed: ", hr); - return nullptr; - } - { LPWSTR transform_name; UINT32 transform_name_length; @@ -1134,6 +1127,14 @@ MediaCaptureMF::CreateVideoEncodeTransform(std::string_view codec, u32 frame_rat StringUtil::WideStringToUTF8String(std::wstring_view(transform_name, transform_name_length))); CoTaskMemFree(transform_name); } + + wrap_MFHeapFree(transforms); + } + + if (FAILED(hr)) [[unlikely]] + { + Error::SetHResult(error, "Encoder ActivateObject() failed: ", hr); + return nullptr; } *use_async_transform = false;