Alexandre Julliard : shell32: Fix setting of NULL arguments in IShellLink.
Alexandre Julliard
julliard at winehq.org
Tue Nov 17 09:28:15 CST 2009
Module: wine
Branch: master
Commit: 61a4200162a3943dea88e401d9bef6dae2a66285
URL: http://source.winehq.org/git/wine.git/?a=commit;h=61a4200162a3943dea88e401d9bef6dae2a66285
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Nov 16 20:09:48 2009 +0100
shell32: Fix setting of NULL arguments in IShellLink.
---
dlls/shell32/shelllink.c | 25 +++++++++++++++++--------
dlls/shell32/tests/shelllink.c | 14 ++++++++++++++
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c
index 414cc54..3b16170 100644
--- a/dlls/shell32/shelllink.c
+++ b/dlls/shell32/shelllink.c
@@ -1497,9 +1497,13 @@ static HRESULT WINAPI IShellLinkA_fnSetArguments(IShellLinkA * iface, LPCSTR psz
TRACE("(%p)->(args=%s)\n",This, pszArgs);
HeapFree(GetProcessHeap(), 0, This->sArgs);
- This->sArgs = HEAP_strdupAtoW( GetProcessHeap(), 0, pszArgs);
- if( !This->sArgs )
- return E_OUTOFMEMORY;
+ if (pszArgs)
+ {
+ This->sArgs = HEAP_strdupAtoW( GetProcessHeap(), 0, pszArgs);
+ if( !This->sArgs )
+ return E_OUTOFMEMORY;
+ }
+ else This->sArgs = NULL;
This->bDirty = TRUE;
@@ -1877,11 +1881,16 @@ static HRESULT WINAPI IShellLinkW_fnSetArguments(IShellLinkW * iface, LPCWSTR ps
TRACE("(%p)->(args=%s)\n",This, debugstr_w(pszArgs));
HeapFree(GetProcessHeap(), 0, This->sArgs);
- This->sArgs = HeapAlloc( GetProcessHeap(), 0,
- (lstrlenW( pszArgs )+1)*sizeof (WCHAR) );
- if ( !This->sArgs )
- return E_OUTOFMEMORY;
- lstrcpyW( This->sArgs, pszArgs );
+ if (pszArgs)
+ {
+ This->sArgs = HeapAlloc( GetProcessHeap(), 0,
+ (lstrlenW( pszArgs )+1)*sizeof (WCHAR) );
+ if ( !This->sArgs )
+ return E_OUTOFMEMORY;
+ lstrcpyW( This->sArgs, pszArgs );
+ }
+ else This->sArgs = NULL;
+
This->bDirty = TRUE;
return S_OK;
diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c
index 2f20200..2535471 100644
--- a/dlls/shell32/tests/shelllink.c
+++ b/dlls/shell32/tests/shelllink.c
@@ -275,6 +275,20 @@ static void test_get_set(void)
ok(SUCCEEDED(r), "GetArguments failed (0x%08x)\n", r);
ok(lstrcmp(buffer,str)==0, "GetArguments returned '%s'\n", buffer);
+ strcpy(buffer,"garbage");
+ r = IShellLinkA_SetArguments(sl, NULL);
+ ok(SUCCEEDED(r), "SetArguments failed (0x%08x)\n", r);
+ r = IShellLinkA_GetArguments(sl, buffer, sizeof(buffer));
+ ok(SUCCEEDED(r), "GetArguments failed (0x%08x)\n", r);
+ ok(!buffer[0] || lstrcmp(buffer,str)==0, "GetArguments returned '%s'\n", buffer);
+
+ strcpy(buffer,"garbage");
+ r = IShellLinkA_SetArguments(sl, "");
+ ok(SUCCEEDED(r), "SetArguments failed (0x%08x)\n", r);
+ r = IShellLinkA_GetArguments(sl, buffer, sizeof(buffer));
+ ok(SUCCEEDED(r), "GetArguments failed (0x%08x)\n", r);
+ ok(!buffer[0], "GetArguments returned '%s'\n", buffer);
+
/* Test Getting / Setting showcmd */
i=0xdeadbeef;
r = IShellLinkA_GetShowCmd(sl, &i);
More information about the wine-cvs
mailing list