From 12d73316e475202803680a59ab60939d234120f6 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Wed, 23 Dec 2015 00:36:45 +0300 Subject: [PATCH] ole32: Fix parameter validation for CoGetMalloc(). Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/ole32/ifs.c | 15 ++++++++++----- dlls/ole32/tests/compobj.c | 15 +++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/dlls/ole32/ifs.c b/dlls/ole32/ifs.c index 696a7b832cc..18fd1fd58b2 100644 --- a/dlls/ole32/ifs.c +++ b/dlls/ole32/ifs.c @@ -368,17 +368,22 @@ static const IMallocVtbl VT_IMalloc32 = * Retrieves the current IMalloc interface for the process. * * PARAMS - * dwMemContext [I] - * lpMalloc [O] Address where memory allocator object will be stored. + * context [I] Should always be MEMCTX_TASK. + * imalloc [O] Address where memory allocator object will be stored. * * RETURNS * Success: S_OK. * Failure: HRESULT code. */ -HRESULT WINAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC *lpMalloc) +HRESULT WINAPI CoGetMalloc(DWORD context, IMalloc **imalloc) { - *lpMalloc = &Malloc32.IMalloc_iface; - return S_OK; + if (context != MEMCTX_TASK) { + *imalloc = NULL; + return E_INVALIDARG; + } + + *imalloc = &Malloc32.IMalloc_iface; + return S_OK; } /*********************************************************************** diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index 10eb2fa9f3a..1913e1f57e4 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -2629,34 +2629,29 @@ if (0) /* crashes on native */ imalloc = (void*)0xdeadbeef; hr = CoGetMalloc(0, &imalloc); -todo_wine { ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); ok(imalloc == NULL, "got %p\n", imalloc); -} + imalloc = (void*)0xdeadbeef; hr = CoGetMalloc(MEMCTX_SHARED, &imalloc); -todo_wine { ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); ok(imalloc == NULL, "got %p\n", imalloc); -} + imalloc = (void*)0xdeadbeef; hr = CoGetMalloc(MEMCTX_MACSYSTEM, &imalloc); -todo_wine { ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); ok(imalloc == NULL, "got %p\n", imalloc); -} + imalloc = (void*)0xdeadbeef; hr = CoGetMalloc(MEMCTX_UNKNOWN, &imalloc); -todo_wine { ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); ok(imalloc == NULL, "got %p\n", imalloc); -} + imalloc = (void*)0xdeadbeef; hr = CoGetMalloc(MEMCTX_SAME, &imalloc); -todo_wine { ok(hr == E_INVALIDARG, "got 0x%08x\n", hr); ok(imalloc == NULL, "got %p\n", imalloc); -} + imalloc = NULL; hr = CoGetMalloc(MEMCTX_TASK, &imalloc); ok(hr == S_OK, "got 0x%08x\n", hr);