Module: wine Branch: master Commit: a9ac4a119a5ee94896298532c602713389b7a5c9 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a9ac4a119a5ee94896298532c6...
Author: Detlef Riekenberg wine.dev@web.de Date: Mon Apr 19 00:45:19 2010 +0200
shlwapi: Fix broken NULL checks (with tests).
---
dlls/shlwapi/tests/thread.c | 16 +++++++++++++++- dlls/shlwapi/thread.c | 8 ++++---- 2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/dlls/shlwapi/tests/thread.c b/dlls/shlwapi/tests/thread.c index 90e87f5..ea89424 100644 --- a/dlls/shlwapi/tests/thread.c +++ b/dlls/shlwapi/tests/thread.c @@ -110,6 +110,11 @@ static void test_SHSetThreadRef(void) return; }
+ /* start with a clean state */ + hr = pSHSetThreadRef(NULL); + ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr); + + /* build and set out object */ init_threadref(&ref, &refcount); AddRef_called = 0; refcount = 1; @@ -118,7 +123,7 @@ static void test_SHSetThreadRef(void) "got 0x%x with %d, %d (expected S_OK with 1, 0)\n", hr, refcount, AddRef_called);
- /* Read back IUnkonwn */ + /* read back our object */ AddRef_called = 0; refcount = 1; punk = NULL; @@ -127,6 +132,15 @@ static void test_SHSetThreadRef(void) "got 0x%x and %p with %d, %d (expected S_OK and %p with 2, 1)\n", hr, punk, refcount, AddRef_called, &ref);
+ /* clear the onject pointer */ + hr = pSHSetThreadRef(NULL); + ok(hr == S_OK, "got 0x%x (expected S_OK)\n", hr); + + /* verify, that our object is no longer known as ThreadRef */ + hr = pSHGetThreadRef(&punk); + ok( (hr == E_NOINTERFACE) && (punk == NULL), + "got 0x%x and %p (expected E_NOINTERFACE and NULL)\n", hr, punk); + }
START_TEST(thread) diff --git a/dlls/shlwapi/thread.c b/dlls/shlwapi/thread.c index cfe6615..fd9e4ba 100644 --- a/dlls/shlwapi/thread.c +++ b/dlls/shlwapi/thread.c @@ -131,13 +131,13 @@ typedef struct tagSHLWAPI_THREAD_INFO * * RETURNS * Success: S_OK. lppUnknown is set to the object reference. - * Failure: E_NOINTERFACE, if an error occurs or lppUnknown is NULL. + * Failure: E_NOINTERFACE, if an error occurs or no object is set */ HRESULT WINAPI SHGetThreadRef(IUnknown **lppUnknown) { TRACE("(%p)\n", lppUnknown);
- if (!lppUnknown || SHLWAPI_ThreadRef_index == TLS_OUT_OF_INDEXES) + if (SHLWAPI_ThreadRef_index == TLS_OUT_OF_INDEXES) return E_NOINTERFACE;
*lppUnknown = TlsGetValue(SHLWAPI_ThreadRef_index); @@ -159,13 +159,13 @@ HRESULT WINAPI SHGetThreadRef(IUnknown **lppUnknown) * * RETURNS * Success: S_OK. lpUnknown is stored and can be retrieved by SHGetThreadRef() - * Failure: E_NOINTERFACE, if an error occurs or lpUnknown is NULL. + * Failure: E_NOINTERFACE, if an error occurs */ HRESULT WINAPI SHSetThreadRef(IUnknown *lpUnknown) { TRACE("(%p)\n", lpUnknown);
- if (!lpUnknown || SHLWAPI_ThreadRef_index == TLS_OUT_OF_INDEXES) + if (SHLWAPI_ThreadRef_index == TLS_OUT_OF_INDEXES) return E_NOINTERFACE;
TlsSetValue(SHLWAPI_ThreadRef_index, lpUnknown);