[PATCH] ole32: Fix parameter validation for CoGetMalloc()
Nikolay Sivov
nsivov at codeweavers.com
Tue Dec 22 15:36:45 CST 2015
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
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 1254fcf..a36f8f4 100644
--- a/dlls/ole32/tests/compobj.c
+++ b/dlls/ole32/tests/compobj.c
@@ -2675,34 +2675,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);
--
2.6.4
More information about the wine-patches
mailing list