Nikolay Sivov : evr/presenter: Fix a crash when releasing partially initialized object.

Alexandre Julliard julliard at winehq.org
Fri Oct 29 16:29:07 CDT 2021


Module: wine
Branch: master
Commit: 3c1a02eb9712a4134ecbed67ed5a77736461a2ef
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3c1a02eb9712a4134ecbed67ed5a77736461a2ef

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Oct 29 15:30:26 2021 +0300

evr/presenter: Fix a crash when releasing partially initialized object.

This happens when presenter is unable to create d3d device.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/evr/presenter.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c
index a91510b13bc..9aef960dbb8 100644
--- a/dlls/evr/presenter.c
+++ b/dlls/evr/presenter.c
@@ -267,8 +267,11 @@ static void video_presenter_reset_media_type(struct video_presenter *presenter)
         IMFMediaType_Release(presenter->media_type);
     presenter->media_type = NULL;
 
-    IMFVideoSampleAllocator_UninitializeSampleAllocator(presenter->allocator);
-    video_presenter_set_allocator_callback(presenter, NULL);
+    if (presenter->allocator)
+    {
+        IMFVideoSampleAllocator_UninitializeSampleAllocator(presenter->allocator);
+        video_presenter_set_allocator_callback(presenter, NULL);
+    }
 }
 
 static HRESULT video_presenter_set_media_type(struct video_presenter *presenter, IMFMediaType *media_type)
@@ -2083,7 +2086,10 @@ HRESULT evr_presenter_create(IUnknown *outer, void **out)
         goto failed;
 
     if (FAILED(hr = video_presenter_init_d3d(object)))
+    {
+        WARN("Failed to initialize d3d device, hr %#x.\n", hr);
         goto failed;
+    }
 
     *out = &object->IUnknown_inner;
 




More information about the wine-cvs mailing list