diff --git a/dlls/shell32/shelllink.c b/dlls/shell32/shelllink.c index 05978f331f344251968b75586779a81f7f541c78..231c72c83de9d32d8c7a3bfb2cd475eff8cb0c36 100644 --- a/dlls/shell32/shelllink.c +++ b/dlls/shell32/shelllink.c @@ -1651,6 +1651,8 @@ static HRESULT WINAPI IShellLinkA_fnSetPath(IShellLinkA * iface, LPCSTR pszFile) TRACE("(%p)->(path=%s)\n",This, pszFile); + if (!pszFile) return E_INVALIDARG; + str = HEAP_strdupAtoW(GetProcessHeap(), 0, pszFile); if( !str ) return E_OUTOFMEMORY; @@ -2168,6 +2170,8 @@ static HRESULT WINAPI IShellLinkW_fnSetPath(IShellLinkW * iface, LPCWSTR pszFile TRACE("(%p)->(path=%s)\n",This, debugstr_w(pszFile)); + if (!pszFile) return E_INVALIDARG; + /* quotes at the ends of the string are stripped */ len = lstrlenW(pszFile); if (pszFile[0] == '"' && pszFile[len-1] == '"') diff --git a/dlls/shell32/tests/shelllink.c b/dlls/shell32/tests/shelllink.c index c28c715ba5c862128489d0b10bdccdceaac1196d..a1e1cd46974b1052524bcc06463119f61c6b6e47 100644 --- a/dlls/shell32/tests/shelllink.c +++ b/dlls/shell32/tests/shelllink.c @@ -156,6 +156,9 @@ static void test_get_set(void) ok(SUCCEEDED(r), "GetPath failed (0x%08x)\n", r); ok(*buffer=='\0', "GetPath returned '%s'\n", buffer); + r = IShellLinkA_SetPath(sl, NULL); + ok(r==E_INVALIDARG, "SetPath failed (0x%08x)\n", r); + r = IShellLinkA_SetPath(sl, ""); ok(r==S_OK, "SetPath failed (0x%08x)\n", r); @@ -700,6 +703,9 @@ static void test_datalink(void) ok( r == E_FAIL, "CopyDataBlock failed\n"); ok( dar == NULL, "should be null\n"); + r = IShellLinkW_SetPath(sl, NULL); + ok(r == E_INVALIDARG, "set path failed\n"); + r = IShellLinkW_SetPath(sl, lnk); ok(r == S_OK, "set path failed\n");