[EVENTLOG]

- In ElfGetLogHandleEntryByHandle, actually verify the validity of the handle by traversing the log handle list. Fixes crash in advapi32_winetest:eventlog (double close).
- Minor style improvements to ElfDeleteEventLogHandle
CORE-8621 #resolve

svn path=/trunk/; revision=64689
This commit is contained in:
Thomas Faber 2014-10-12 11:23:05 +00:00
parent e85c3287e6
commit 98b2bae8db

View file

@ -196,31 +196,40 @@ Done:
PLOGHANDLE ElfGetLogHandleEntryByHandle(IELF_HANDLE EventLogHandle)
{
PLIST_ENTRY CurrentEntry;
PLOGHANDLE lpLogHandle;
if (IsListEmpty(&LogHandleListHead))
CurrentEntry = LogHandleListHead.Flink;
while (CurrentEntry != &LogHandleListHead)
{
return NULL;
lpLogHandle = CONTAINING_RECORD(CurrentEntry,
LOGHANDLE,
LogHandleListEntry);
CurrentEntry = CurrentEntry->Flink;
if (lpLogHandle == EventLogHandle)
return lpLogHandle;
}
lpLogHandle = CONTAINING_RECORD((PLOGHANDLE)EventLogHandle, LOGHANDLE, LogHandleListEntry);
return lpLogHandle;
return NULL;
}
static NTSTATUS
ElfDeleteEventLogHandle(IELF_HANDLE EventLogHandle)
ElfDeleteEventLogHandle(IELF_HANDLE LogHandle)
{
PLOGHANDLE lpLogHandle = (PLOGHANDLE)EventLogHandle;
PLOGHANDLE lpLogHandle;
if (!ElfGetLogHandleEntryByHandle(lpLogHandle))
lpLogHandle = ElfGetLogHandleEntryByHandle(LogHandle);
if (!lpLogHandle)
{
return STATUS_INVALID_HANDLE;
}
RemoveEntryList(&lpLogHandle->LogHandleListEntry);
LogfClose(lpLogHandle->LogFile, FALSE);
HeapFree(GetProcessHeap(),0,lpLogHandle);
HeapFree(GetProcessHeap(), 0, lpLogHandle);
return STATUS_SUCCESS;
}