Module: wine Branch: master Commit: 06d36b1adf1ae7b73a200d6a35a143f6b3fd91c9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=06d36b1adf1ae7b73a200d6a3...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Thu Apr 16 22:01:50 2020 +0300
ole32: Fix spy callback arguments for IMalloc::GetSize().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/ifs.c | 35 +++++++++++++++++++++-------------- dlls/ole32/tests/compobj.c | 8 ++++++++ 2 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/dlls/ole32/ifs.c b/dlls/ole32/ifs.c index 410691b2a8..1b19be424c 100644 --- a/dlls/ole32/ifs.c +++ b/dlls/ole32/ifs.c @@ -296,26 +296,33 @@ static void WINAPI IMalloc_fnFree(IMalloc *iface, void *pv) * win95: size allocated (4 byte boundaries) * win2k: size originally requested !!! (allocated on 8 byte boundaries) */ -static SIZE_T WINAPI IMalloc_fnGetSize(IMalloc *iface, void *pv) +static SIZE_T WINAPI IMalloc_fnGetSize(IMalloc *iface, void *mem) { - SIZE_T cb; - BOOL fSpyed = FALSE; + BOOL spyed_block = FALSE, spy_active = FALSE; + SIZE_T size;
- TRACE("(%p)\n",pv); + TRACE("(%p)\n", mem);
- if(Malloc32.pSpy) { - EnterCriticalSection(&IMalloc32_SpyCS); - pv = IMallocSpy_PreGetSize(Malloc32.pSpy, pv, fSpyed); - } + if (!mem) + return (SIZE_T)-1; + + if (Malloc32.pSpy) + { + EnterCriticalSection(&IMalloc32_SpyCS); + spyed_block = !!mallocspy_is_allocation_spyed(mem); + spy_active = TRUE; + mem = IMallocSpy_PreGetSize(Malloc32.pSpy, mem, spyed_block); + }
- cb = HeapSize(GetProcessHeap(),0,pv); + size = HeapSize(GetProcessHeap(), 0, mem);
- if(Malloc32.pSpy) { - cb = IMallocSpy_PostGetSize(Malloc32.pSpy, cb, fSpyed); - LeaveCriticalSection(&IMalloc32_SpyCS); - } + if (spy_active) + { + size = IMallocSpy_PostGetSize(Malloc32.pSpy, size, spyed_block); + LeaveCriticalSection(&IMalloc32_SpyCS); + }
- return cb; + return size; }
/****************************************************************************** diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index b0a6ba1ea7..d6ccbc5882 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -3068,6 +3068,7 @@ static void test_CoWaitForMultipleHandles(void) static void test_CoGetMalloc(void) { IMalloc *imalloc; + SIZE_T size; HRESULT hr; char *ptr; int ret; @@ -3121,6 +3122,13 @@ static void test_CoGetMalloc(void) ret = IMalloc_DidAlloc(imalloc, ptr + 4); ok(ret == 0, "Unexpected return value %d.\n", ret);
+ /* GetSize() */ + size = IMalloc_GetSize(imalloc, NULL); + ok(size == (SIZE_T)-1, "Unexpected return value.\n"); + + size = IMalloc_GetSize(imalloc, ptr); + ok(size == 16, "Unexpected return value.\n"); + IMalloc_Free(imalloc, ptr);
IMalloc_Release(imalloc);