diff --git a/dlls/ole32/compositemoniker.c b/dlls/ole32/compositemoniker.c index c49e9b8984e1e1fedb47c2d73f31f750a0083dd9..825a2ab2aaddab9def73b088ee7b7fc1d9954223 100644 --- a/dlls/ole32/compositemoniker.c +++ b/dlls/ole32/compositemoniker.c @@ -1813,12 +1813,16 @@ CompositeMonikerImpl_Construct(IMoniker** ppMoniker, if (++This->tabLastIndex==This->tabSize){ + LPVOID tab_moniker = This->tabMoniker; This->tabSize+=BLOCK_TAB_SIZE; This->tabMoniker=HeapReAlloc(GetProcessHeap(),0,This->tabMoniker,This->tabSize*sizeof(IMoniker)); - if (This->tabMoniker==NULL) + if (This->tabMoniker==NULL){ + HeapFree(GetProcessHeap(), 0, tab_moniker); + HeapFree(GetProcessHeap(), 0, This); return E_OUTOFMEMORY; + } } } @@ -1862,13 +1866,17 @@ CompositeMonikerImpl_Construct(IMoniker** ppMoniker, /* resize tabMoniker if needed */ if (This->tabLastIndex==This->tabSize){ + LPVOID tab_moniker = This->tabMoniker; This->tabSize+=BLOCK_TAB_SIZE; This->tabMoniker=HeapReAlloc(GetProcessHeap(),0,This->tabMoniker,This->tabSize*sizeof(IMoniker)); - if (This->tabMoniker==NULL) - return E_OUTOFMEMORY; + if (This->tabMoniker==NULL){ + HeapFree(GetProcessHeap(), 0, tab_moniker); + HeapFree(GetProcessHeap(), 0, This); + return E_OUTOFMEMORY; + } } } else{ @@ -1901,13 +1909,17 @@ CompositeMonikerImpl_Construct(IMoniker** ppMoniker, } if (This->tabLastIndex==This->tabSize){ + LPVOID tab_moniker = This->tabMoniker; This->tabSize+=BLOCK_TAB_SIZE; This->tabMoniker=HeapReAlloc(GetProcessHeap(),0,This->tabMoniker,This->tabSize*sizeof(IMoniker)); - if (This->tabMoniker==NULL) + if (This->tabMoniker==NULL){ + HeapFree(GetProcessHeap(), 0, tab_moniker); + HeapFree(GetProcessHeap(), 0, This); return E_OUTOFMEMORY; + } } }