- fix multiple bugs in mydocuments shellfolder:

- zero initialize buffer
- check return value of SHGetSpecialFolderPathW
- zeroize buffer in ISF_MyDocuments_fnGetDisplayNameOf


svn path=/trunk/; revision=34678
This commit is contained in:
Johannes Anderwald 2008-07-22 11:20:01 +00:00
parent 70b9b15c69
commit c18f0a3fb9

View file

@ -235,17 +235,17 @@ WINAPI ISF_MyDocuments_fnParseDisplayName (IShellFolder2 * iface,
} }
/************************************************************************** /**************************************************************************
* CreateDesktopEnumList() * CreateMyDocumentsEnumList()
*/ */
static BOOL CreateDesktopEnumList(IEnumIDList *list, DWORD dwFlags) static BOOL CreateMyDocumentsEnumList(IEnumIDList *list, DWORD dwFlags)
{ {
BOOL ret = TRUE; BOOL ret = TRUE;
WCHAR szPath[MAX_PATH]; WCHAR szPath[MAX_PATH] = {0};
TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags); TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags);
/* enumerate the elements in %windir%\desktop */ /* enumerate the elements in %windir%\desktop */
SHGetSpecialFolderPathW(0, szPath, CSIDL_MYDOCUMENTS, FALSE); ret = SHGetSpecialFolderPathW(0, szPath, CSIDL_PERSONAL, FALSE);
ret = ret && CreateFolderEnumList(list, szPath, dwFlags); ret = ret && CreateFolderEnumList(list, szPath, dwFlags);
return ret; return ret;
@ -264,7 +264,7 @@ static HRESULT WINAPI ISF_MyDocuments_fnEnumObjects (IShellFolder2 * iface,
*ppEnumIDList = IEnumIDList_Constructor(); *ppEnumIDList = IEnumIDList_Constructor();
if (*ppEnumIDList) if (*ppEnumIDList)
CreateDesktopEnumList(*ppEnumIDList, dwFlags); CreateMyDocumentsEnumList(*ppEnumIDList, dwFlags);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
@ -500,6 +500,8 @@ WINAPI ISF_MyDocuments_fnGetDisplayNameOf (IShellFolder2 * iface,
if (!pszPath) if (!pszPath)
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
ZeroMemory(pszPath, (MAX_PATH +1) * sizeof(WCHAR));
if (_ILIsMyDocuments (pidl)) if (_ILIsMyDocuments (pidl))
{ {
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&