Module: wine Branch: master Commit: 12d73316e475202803680a59ab60939d234120f6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=12d73316e475202803680a59ab...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Wed Dec 23 00:36:45 2015 +0300
ole32: Fix parameter validation for CoGetMalloc().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 696a7b8..18fd1fd 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 10eb2fa..1913e1f 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);