From 2554a55b342ebda81fdc2468e38d32830c50345b Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 30 Apr 2010 10:04:19 -0500 Subject: [PATCH] shell32: Handle NULL pName in ShellLink fnSetDescription. --- dlls/shell32/shelllink.c | 26 ++++++++++++++++++-------- dlls/shell32/tests/shelllink.c | 9 +++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c index a7eb7f96985..a052a1832fc 100644 --- a/dlls/shell32/shelllink.c +++ b/dlls/shell32/shelllink.c @@ -1469,9 +1469,14 @@ static HRESULT WINAPI IShellLinkA_fnSetDescription(IShellLinkA * iface, LPCSTR p TRACE("(%p)->(pName=%s)\n", This, pszName); HeapFree(GetProcessHeap(), 0, This->sDescription); - This->sDescription = HEAP_strdupAtoW( GetProcessHeap(), 0, pszName); - if ( !This->sDescription ) - return E_OUTOFMEMORY; + if (pszName) + { + This->sDescription = HEAP_strdupAtoW( GetProcessHeap(), 0, pszName); + if ( !This->sDescription ) + return E_OUTOFMEMORY; + } + else + This->sDescription = NULL; This->bDirty = TRUE; @@ -1852,12 +1857,17 @@ static HRESULT WINAPI IShellLinkW_fnSetDescription(IShellLinkW * iface, LPCWSTR TRACE("(%p)->(desc=%s)\n",This, debugstr_w(pszName)); HeapFree(GetProcessHeap(), 0, This->sDescription); - This->sDescription = HeapAlloc( GetProcessHeap(), 0, - (lstrlenW( pszName )+1)*sizeof(WCHAR) ); - if ( !This->sDescription ) - return E_OUTOFMEMORY; + if (pszName) + { + This->sDescription = HeapAlloc( GetProcessHeap(), 0, + (lstrlenW( pszName )+1)*sizeof(WCHAR) ); + if ( !This->sDescription ) + return E_OUTOFMEMORY; - lstrcpyW( This->sDescription, pszName ); + lstrcpyW( This->sDescription, pszName ); + } + else + This->sDescription = NULL; This->bDirty = TRUE; return S_OK; diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c index 6c020ae81c7..1b38b0dc82a 100644 --- a/dlls/shell32/tests/shelllink.c +++ b/dlls/shell32/tests/shelllink.c @@ -136,6 +136,15 @@ static void test_get_set(void) ok(r == S_OK, "GetDescription failed (0x%08x)\n", r); ok(lstrcmp(buffer,str)==0, "GetDescription returned '%s'\n", buffer); + r = IShellLinkA_SetDescription(sl, NULL); + ok(r == S_OK, "SetDescription failed (0x%08x)\n", r); + + strcpy(buffer,"garbage"); + r = IShellLinkA_GetDescription(sl, buffer, sizeof(buffer)); + ok(r == S_OK, "GetDescription failed (0x%08x)\n", r); + ok(*buffer=='\0' || broken(lstrcmp(buffer,str)==0), "GetDescription returned '%s'\n", buffer); /* NT4 */ + + /* Test Getting / Setting the work directory */ strcpy(buffer,"garbage"); r = IShellLinkA_GetWorkingDirectory(sl, buffer, sizeof(buffer)); -- 2.11.4.GIT