From bb03da981cf476686b05884bdcef3f507f3b88f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 13 Apr 2018 00:52:25 +0200 Subject: [PATCH] [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. --- .../applications/mscutils/eventvwr/eventvwr.c | 44 ++++++++++++------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/base/applications/mscutils/eventvwr/eventvwr.c b/base/applications/mscutils/eventvwr/eventvwr.c index 6801b275e4d..f7e89d3207d 100644 --- a/base/applications/mscutils/eventvwr/eventvwr.c +++ b/base/applications/mscutils/eventvwr/eventvwr.c @@ -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) {