Module: wine Branch: master Commit: 51021faaef8312c35e9772873ad588c194c5c709 URL: http://source.winehq.org/git/wine.git/?a=commit;h=51021faaef8312c35e9772873a...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Aug 15 16:38:33 2016 +0300
strmbase: Fix media type leaks when creating IEnumMediaTypes instance (Valgrind).
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/strmbase/mediatype.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/strmbase/mediatype.c b/dlls/strmbase/mediatype.c index 63b9ec2..91c0ddc 100644 --- a/dlls/strmbase/mediatype.c +++ b/dlls/strmbase/mediatype.c @@ -125,18 +125,23 @@ HRESULT WINAPI EnumMediaTypes_Construct(BasePin *basePin, BasePin_GetMediaType e pEnumMediaTypes->basePin = basePin;
i = 0; - while (enumFunc(basePin, i, &amt) == S_OK) i++; + while (enumFunc(basePin, i, &amt) == S_OK) + { + FreeMediaType(&amt); + i++; + }
pEnumMediaTypes->enumMediaDetails.cMediaTypes = i; pEnumMediaTypes->enumMediaDetails.pMediaTypes = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * i); memset(pEnumMediaTypes->enumMediaDetails.pMediaTypes, 0, sizeof(AM_MEDIA_TYPE) * i); for (i = 0; i < pEnumMediaTypes->enumMediaDetails.cMediaTypes; i++) { - enumFunc(basePin,i,&amt); - if (FAILED(CopyMediaType(&pEnumMediaTypes->enumMediaDetails.pMediaTypes[i], &amt))) + HRESULT hr; + + if (FAILED(hr = enumFunc(basePin, i, &pEnumMediaTypes->enumMediaDetails.pMediaTypes[i]))) { IEnumMediaTypes_Release(&pEnumMediaTypes->IEnumMediaTypes_iface); - return E_OUTOFMEMORY; + return hr; } } *ppEnum = &pEnumMediaTypes->IEnumMediaTypes_iface;