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