[PATCH v2] strmbase: Fix some memory leaks (Valgrind).

Sven Baars sven.wine at gmail.com
Tue Jan 29 13:28:58 CST 2019


Signed-off-by: Sven Baars <sven.wine at gmail.com>
---
v2: Copy directly into This->enumMediaDetails.pMediaTypes

 dlls/strmbase/mediatype.c | 9 ++++++---
 dlls/strmbase/renderer.c  | 1 +
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/dlls/strmbase/mediatype.c b/dlls/strmbase/mediatype.c
index 91c0ddc60a..1ad4d3b13e 100644
--- a/dlls/strmbase/mediatype.c
+++ b/dlls/strmbase/mediatype.c
@@ -264,14 +264,17 @@ static HRESULT WINAPI IEnumMediaTypesImpl_Reset(IEnumMediaTypes * iface)
     CoTaskMemFree(This->enumMediaDetails.pMediaTypes);
 
     i = 0;
-    while (This->enumMediaFunction(This->basePin, i, &amt) == S_OK) i++;
+    while (This->enumMediaFunction(This->basePin, i, &amt) == S_OK)
+    {
+        FreeMediaType(&amt);
+        i++;
+    }
 
     This->enumMediaDetails.cMediaTypes = i;
     This->enumMediaDetails.pMediaTypes = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * i);
     for (i = 0; i < This->enumMediaDetails.cMediaTypes; i++)
     {
-        This->enumMediaFunction(This->basePin, i,&amt);
-        if (FAILED(CopyMediaType(&This->enumMediaDetails.pMediaTypes[i], &amt)))
+        if (FAILED(This->enumMediaFunction(This->basePin, i, &This->enumMediaDetails.pMediaTypes[i])))
         {
             while (i--)
                 FreeMediaType(&This->enumMediaDetails.pMediaTypes[i]);
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index c06661ce73..3d5e4b5e7d 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -346,6 +346,7 @@ HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSamp
         {
             return VFW_E_TYPE_NOT_ACCEPTED;
         }
+        DeleteMediaType(pmt);
     }
 
     This->pMediaSample = pSample;
-- 
2.17.1




More information about the wine-devel mailing list