Module: wine Branch: master Commit: 0c823e83690804923b19c4f36096fbf62d0e3bde URL: http://source.winehq.org/git/wine.git/?a=commit;h=0c823e83690804923b19c4f360...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Jul 28 15:43:21 2016 +0300
strmbase: Fully cleanup on initialization failure (Coverity).
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 d100cc9..63b9ec2 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; } }