mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 01:39:30 +00:00
[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:
parent
e85c3287e6
commit
98b2bae8db
1 changed files with 18 additions and 9 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue