Aric Stewart : shell32: Handle NULL pName in ShellLink fnSetDescription.

Alexandre Julliard julliard at winehq.org
Mon May 3 11:54:11 CDT 2010


Module: wine
Branch: master
Commit: 2554a55b342ebda81fdc2468e38d32830c50345b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2554a55b342ebda81fdc2468e38d32830c50345b

Author: Aric Stewart <aric at 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));




More information about the wine-cvs mailing list