From ab64e3f09592009385309ef8cef4a7b438241835 Mon Sep 17 00:00:00 2001 From: Michael Stefaniuc Date: Tue, 30 Sep 2003 00:24:08 +0000 Subject: [PATCH] Fixes for memory leaks on error path. One fix for use of previous released pointer. --- dlls/ole32/compositemoniker.c | 10 ++++++---- dlls/ole32/filemoniker.c | 40 +++++++++++++++++++++------------------- dlls/ole32/ole16.c | 6 ++---- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/dlls/ole32/compositemoniker.c b/dlls/ole32/compositemoniker.c index bfe10497a66..623421dfc8c 100644 --- a/dlls/ole32/compositemoniker.c +++ b/dlls/ole32/compositemoniker.c @@ -1632,14 +1632,14 @@ HRESULT WINAPI EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker, int i; + if (currentPos > tabSize) + return E_INVALIDARG; + newEnumMoniker = HeapAlloc(GetProcessHeap(), 0, sizeof(EnumMonikerImpl)); if (newEnumMoniker == 0) return STG_E_INSUFFICIENTMEMORY; - if (currentPos > tabSize) - return E_INVALIDARG; - /* Initialize the virtual function table. */ newEnumMoniker->lpVtbl = &VT_EnumMonikerImpl; newEnumMoniker->ref = 0; @@ -1649,8 +1649,10 @@ HRESULT WINAPI EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker, newEnumMoniker->tabMoniker=HeapAlloc(GetProcessHeap(),0,tabSize*sizeof(IMoniker)); - if (newEnumMoniker->tabMoniker==NULL) + if (newEnumMoniker->tabMoniker==NULL) { + HeapFree(GetProcessHeap(), 0, newEnumMoniker); return E_OUTOFMEMORY; + } if (leftToRigth) for (i=0;ifilePathName=filePathW; - HeapFree(GetProcessHeap(),0,filePathA); - return res; } @@ -1030,6 +1029,7 @@ HRESULT WINAPI FileMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOth IMoniker_IsSystemMoniker(pmkOther,&mkSys); if(mkSys==MKSYS_FILEMONIKER){ + HRESULT ret; CreateBindCtx(0,&pbind); @@ -1068,24 +1068,26 @@ HRESULT WINAPI FileMonikerImpl_CommonPrefixWith(IMoniker* iface,IMoniker* pmkOth sameIdx--; if (machimeNameCase && (sameIdx<=3) && (nb1 > 3 || nb2 > 3) ) - return MK_E_NOPREFIX; - - for(i=0;i