Module: wine Branch: master Commit: 2554a55b342ebda81fdc2468e38d32830c50345b URL: http://source.winehq.org/git/wine.git/?a=commit;h=2554a55b342ebda81fdc2468e3...
Author: Aric Stewart aric@codeweavers.com Date: Fri Apr 30 10:04:19 2010 -0500
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 a7eb7f9..a052a18 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 6c020ae..1b38b0d 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));