From 5d4b23e6e7eb939ffb2605685099f88d3ebca751 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Fri, 15 Jan 2016 15:09:54 +0300 Subject: [PATCH] ole32: Zero output interface pointer in OleGetClipboard() on error. Signed-off-by: Paul Gofman Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/ole32/clipboard.c | 1 + dlls/ole32/tests/clipboard.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c index ca9520fe46..b871bbc467 100644 --- a/dlls/ole32/clipboard.c +++ b/dlls/ole32/clipboard.c @@ -2201,6 +2201,7 @@ HRESULT WINAPI OleGetClipboard(IDataObject **obj) TRACE("(%p)\n", obj); if(!obj) return E_INVALIDARG; + *obj = NULL; if(FAILED(hr = get_ole_clipbrd(&clipbrd))) return hr; diff --git a/dlls/ole32/tests/clipboard.c b/dlls/ole32/tests/clipboard.c index 02097ea01b..1087de3b2a 100644 --- a/dlls/ole32/tests/clipboard.c +++ b/dlls/ole32/tests/clipboard.c @@ -1571,6 +1571,25 @@ static void test_multithreaded_clipboard(void) OleUninitialize(); } +static void test_get_clipboard_locked(void) +{ + HRESULT hr; + IDataObject *pDObj; + + OleInitialize(NULL); + + pDObj = (IDataObject *)0xdeadbeef; + /* lock clipboard */ + OpenClipboard(NULL); + hr = OleGetClipboard(&pDObj); + todo_wine ok(hr == CLIPBRD_E_CANT_OPEN, "OleGetClipboard() got 0x%08x instead of 0x%08x\n", hr, CLIPBRD_E_CANT_OPEN); + todo_wine ok(pDObj == NULL, "OleGetClipboard() got 0x%p instead of NULL\n",pDObj); + if (pDObj) IDataObject_Release(pDObj); + CloseClipboard(); + + OleUninitialize(); +} + START_TEST(clipboard) { test_set_clipboard(); @@ -1579,4 +1598,5 @@ START_TEST(clipboard) test_nonole_clipboard(); test_getdatahere(); test_multithreaded_clipboard(); + test_get_clipboard_locked(); } -- 2.33.8