@@ -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