Nikolay Sivov : ole32: Fix spy callback arguments for IMalloc::GetSize().
Alexandre Julliard
julliard at winehq.org
Fri Apr 17 16:12:56 CDT 2020
Module: wine
Branch: master
Commit: 06d36b1adf1ae7b73a200d6a35a143f6b3fd91c9
URL: https://source.winehq.org/git/wine.git/?a=commit;h=06d36b1adf1ae7b73a200d6a35a143f6b3fd91c9
Author: Nikolay Sivov <nsivov at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);
More information about the wine-cvs
mailing list