Skip to content

Commit abf3bde

Browse files
authored
[SHELL32] Make Recycle Bin PIDL data handling more robust (reactos#7328)
1 parent 08a6834 commit abf3bde

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

dll/win32/shell32/folders/CRecycleBin.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -750,24 +750,37 @@ HRESULT WINAPI CRecycleBin::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, LPS
750750
TRACE("(%p, %p, %d, %p)\n", this, pidl, iColumn, pDetails);
751751
if (iColumn >= COLUMNS_COUNT)
752752
return E_FAIL;
753-
pDetails->fmt = RecycleBinColumns[iColumn].fmt;
754-
pDetails->cxChar = RecycleBinColumns[iColumn].cxChars;
753+
755754
if (pidl == NULL)
755+
{
756+
pDetails->fmt = RecycleBinColumns[iColumn].fmt;
757+
pDetails->cxChar = RecycleBinColumns[iColumn].cxChars;
756758
return SHSetStrRet(&pDetails->str, RecycleBinColumns[iColumn].column_name_id);
759+
}
757760

758761
if (iColumn == COLUMN_NAME)
759762
return GetDisplayNameOf(pidl, SHGDN_NORMAL, &pDetails->str);
760763

761764
pFileDetails = _ILGetRecycleStruct(pidl);
765+
if (!pFileDetails && FAILED_UNEXPECTEDLY(E_INVALIDARG))
766+
return E_INVALIDARG;
762767
switch (iColumn)
763768
{
764769
case COLUMN_DATEDEL:
765770
FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime);
766771
break;
767772
case COLUMN_DELFROM:
768773
pszBackslash = wcsrchr(pFileDetails->szName, L'\\');
769-
Length = (pszBackslash - pFileDetails->szName);
770-
memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR));
774+
if (!pszBackslash)
775+
{
776+
ERR("Filename '%ls' not a valid path?\n", pFileDetails->szName);
777+
Length = 0;
778+
}
779+
else
780+
{
781+
Length = (pszBackslash - pFileDetails->szName);
782+
memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR));
783+
}
771784
buffer[Length] = UNICODE_NULL;
772785
if (buffer[0] && buffer[1] == L':' && !buffer[2])
773786
{

0 commit comments

Comments
 (0)