ole32: Don't call spy on IMalloc::Free(NULL).

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2016-03-04 11:24:30 +03:00 committed by Alexandre Julliard
parent a23038217d
commit 110665a3d8
2 changed files with 138 additions and 0 deletions

View File

@ -257,6 +257,9 @@ static void WINAPI IMalloc_fnFree(IMalloc *iface, void *pv)
TRACE("(%p)\n",pv);
if(!pv)
return;
if(Malloc32.pSpy) {
EnterCriticalSection(&IMalloc32_SpyCS);
fSpyed = RemoveMemoryLocation(pv);

View File

@ -2933,6 +2933,140 @@ static void test_CoGetApartmentType(void)
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");
@ -3000,4 +3134,5 @@ START_TEST(compobj)
test_CoGetMalloc();
test_OleRegGetUserType();
test_CoGetApartmentType();
test_IMallocSpy();
}