[EVENTVWR] Additions to the Event Viewer.

- Don't hardcode a buffer length in ExpandEnvironmentStringsW() call.
- If no file name is associated to a log (ErrorLog->FileName == NULL),
  don't try to attempt looking at its file properties. This also allows
  avoiding a crash in the FindFirstFileW() call under certain conditions
  on Windows.
This commit is contained in:
Hermès Bélusca-Maïto 2018-04-13 00:52:25 +02:00
parent ab240d1b6d
commit bb03da981c
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

@ -3459,30 +3459,40 @@ Quit:
FileName = EventLog->FileName;
if (FileName && *FileName)
{
ExpandEnvironmentStringsW(FileName, wszBuf, MAX_PATH);
ExpandEnvironmentStringsW(FileName, wszBuf, ARRAYSIZE(wszBuf));
FileName = wszBuf;
}
else
{
FileName = L"";
}
SetDlgItemTextW(hDlg, IDC_LOGFILE, FileName);
/*
* The general problem here (and in the shell as well) is that
* GetFileAttributesEx fails for files that are opened without
* shared access. To retrieve file information for those we need
* to use something else: FindFirstFile, on the full file name.
*/
Success = GetFileAttributesExW(FileName,
GetFileExInfoStandard,
(LPWIN32_FILE_ATTRIBUTE_DATA)&FileInfo);
if (!Success)
if (FileName && *FileName)
{
HANDLE hFind = FindFirstFileW(FileName, &FileInfo);
Success = (hFind != INVALID_HANDLE_VALUE);
if (Success)
FindClose(hFind);
/*
* The general problem here (and in the shell as well) is that
* GetFileAttributesEx fails for files that are opened without
* shared access. To retrieve file information for those we need
* to use something else: FindFirstFile, on the full file name.
*/
Success = GetFileAttributesExW(FileName,
GetFileExInfoStandard,
(LPWIN32_FILE_ATTRIBUTE_DATA)&FileInfo);
if (!Success)
{
HANDLE hFind = FindFirstFileW(FileName, &FileInfo);
Success = (hFind != INVALID_HANDLE_VALUE);
if (Success)
FindClose(hFind);
}
}
else
{
Success = FALSE;
}
// Starting there, FileName is invalid (because it uses wszBuf)
/* Starting there, FileName becomes invalid because we are reusing wszBuf */
if (Success)
{