Author: tfaber
Date: Sat Apr 9 08:31:49 2016
New Revision: 71119
URL:
http://svn.reactos.org/svn/reactos?rev=71119&view=rev
Log:
[OLE32]
- Apply Wine commit 110665a3 (ole32: Don't call spy on IMalloc::Free(NULL)) by Nikolay
Sivov. Fixes test failures in atl:CComHeapPtr
CORE-11107 #resolve
Modified:
trunk/reactos/dll/win32/ole32/ifs.c
trunk/rostests/winetests/ole32/compobj.c
Modified: trunk/reactos/dll/win32/ole32/ifs.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/ole32/ifs.c?rev=…
==============================================================================
--- trunk/reactos/dll/win32/ole32/ifs.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/ole32/ifs.c [iso-8859-1] Sat Apr 9 08:31:49 2016
@@ -241,6 +241,9 @@
TRACE("(%p)\n",pv);
+ if(!pv)
+ return;
+
if(Malloc32.pSpy) {
EnterCriticalSection(&IMalloc32_SpyCS);
fSpyed = RemoveMemoryLocation(pv);
Modified: trunk/rostests/winetests/ole32/compobj.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/ole32/compobj.c…
==============================================================================
--- trunk/rostests/winetests/ole32/compobj.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/ole32/compobj.c [iso-8859-1] Sat Apr 9 08:31:49 2016
@@ -2936,6 +2936,140 @@
CoUninitialize();
}
+
+static HRESULT WINAPI testspy_QI(IMallocSpy *iface, REFIID riid, void **obj)
+{
+ if (IsEqualIID(riid, &IID_IMallocSpy) || IsEqualIID(riid, &IID_IUnknown))
+ {
+ *obj = iface;
+ IMallocSpy_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI testspy_AddRef(IMallocSpy *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI testspy_Release(IMallocSpy *iface)
+{
+ return 1;
+}
+
+static SIZE_T WINAPI testspy_PreAlloc(IMallocSpy *iface, SIZE_T cb)
+{
+ ok(0, "unexpected call\n");
+ return 0;
+}
+
+static void* WINAPI testspy_PostAlloc(IMallocSpy *iface, void *ptr)
+{
+ ok(0, "unexpected call\n");
+ return NULL;
+}
+
+static void* WINAPI testspy_PreFree(IMallocSpy *iface, void *ptr, BOOL spyed)
+{
+ ok(0, "unexpected call\n");
+ return NULL;
+}
+
+static void WINAPI testspy_PostFree(IMallocSpy *iface, BOOL spyed)
+{
+ ok(0, "unexpected call\n");
+}
+
+static SIZE_T WINAPI testspy_PreRealloc(IMallocSpy *iface, void *ptr, SIZE_T cb, void
**newptr, BOOL spyed)
+{
+ ok(0, "unexpected call\n");
+ return 0;
+}
+
+static void* WINAPI testspy_PostRealloc(IMallocSpy *iface, void *ptr, BOOL spyed)
+{
+ ok(0, "unexpected call\n");
+ return NULL;
+}
+
+static void* WINAPI testspy_PreGetSize(IMallocSpy *iface, void *ptr, BOOL spyed)
+{
+ ok(0, "unexpected call\n");
+ return NULL;
+}
+
+static SIZE_T WINAPI testspy_PostGetSize(IMallocSpy *iface, SIZE_T actual, BOOL spyed)
+{
+ ok(0, "unexpected call\n");
+ return 0;
+}
+
+static void* WINAPI testspy_PreDidAlloc(IMallocSpy *iface, void *ptr, BOOL spyed)
+{
+ ok(0, "unexpected call\n");
+ return NULL;
+}
+
+static int WINAPI testspy_PostDidAlloc(IMallocSpy *iface, void *ptr, BOOL spyed, int
actual)
+{
+ ok(0, "unexpected call\n");
+ return 0;
+}
+
+static void WINAPI testspy_PreHeapMinimize(IMallocSpy *iface)
+{
+ ok(0, "unexpected call\n");
+}
+
+static void WINAPI testspy_PostHeapMinimize(IMallocSpy *iface)
+{
+ ok(0, "unexpected call\n");
+}
+
+static const IMallocSpyVtbl testspyvtbl =
+{
+ testspy_QI,
+ testspy_AddRef,
+ testspy_Release,
+ testspy_PreAlloc,
+ testspy_PostAlloc,
+ testspy_PreFree,
+ testspy_PostFree,
+ testspy_PreRealloc,
+ testspy_PostRealloc,
+ testspy_PreGetSize,
+ testspy_PostGetSize,
+ testspy_PreDidAlloc,
+ testspy_PostDidAlloc,
+ testspy_PreHeapMinimize,
+ testspy_PostHeapMinimize
+};
+
+static IMallocSpy testspy = { &testspyvtbl };
+
+static void test_IMallocSpy(void)
+{
+ IMalloc *imalloc;
+ HRESULT hr;
+
+ hr = CoRegisterMallocSpy(&testspy);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ imalloc = NULL;
+ hr = CoGetMalloc(MEMCTX_TASK, &imalloc);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(imalloc != NULL, "got %p\n", imalloc);
+
+ IMalloc_Free(imalloc, NULL);
+
+ IMalloc_Release(imalloc);
+
+ hr = CoRevokeMallocSpy();
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+}
+
static void init_funcs(void)
{
HMODULE hOle32 = GetModuleHandleA("ole32");
@@ -3003,4 +3137,5 @@
test_CoGetMalloc();
test_OleRegGetUserType();
test_CoGetApartmentType();
-}
+ test_IMallocSpy();
+}