From 0c823e83690804923b19c4f36096fbf62d0e3bde Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Thu, 28 Jul 2016 15:43:21 +0300 Subject: [PATCH] strmbase: Fully cleanup on initialization failure (Coverity). Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/strmbase/mediatype.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dlls/strmbase/mediatype.c b/dlls/strmbase/mediatype.c index d100cc9e8c9..63b9ec2ea52 100644 --- a/dlls/strmbase/mediatype.c +++ b/dlls/strmbase/mediatype.c @@ -111,11 +111,11 @@ HRESULT WINAPI EnumMediaTypes_Construct(BasePin *basePin, BasePin_GetMediaType e IEnumMediaTypesImpl * pEnumMediaTypes = CoTaskMemAlloc(sizeof(IEnumMediaTypesImpl)); AM_MEDIA_TYPE amt; + *ppEnum = NULL; + if (!pEnumMediaTypes) - { - *ppEnum = NULL; return E_OUTOFMEMORY; - } + pEnumMediaTypes->IEnumMediaTypes_iface.lpVtbl = &IEnumMediaTypesImpl_Vtbl; pEnumMediaTypes->refCount = 1; pEnumMediaTypes->uIndex = 0; @@ -129,14 +129,13 @@ HRESULT WINAPI EnumMediaTypes_Construct(BasePin *basePin, BasePin_GetMediaType e 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))) { - while (i--) - FreeMediaType(&pEnumMediaTypes->enumMediaDetails.pMediaTypes[i]); - CoTaskMemFree(pEnumMediaTypes->enumMediaDetails.pMediaTypes); + IEnumMediaTypes_Release(&pEnumMediaTypes->IEnumMediaTypes_iface); return E_OUTOFMEMORY; } }