mirror of
https://github.com/reactos/reactos.git
synced 2024-07-04 03:34:16 +00:00
[WIN32K:NTUSER]
- Use UserRefObjectCo in IntNotifyWinEvent to avoid a reference leak in case the call-out does not return - Sanitize list walk svn path=/trunk/; revision=67907
This commit is contained in:
parent
950f55d8b7
commit
596e134bad
|
@ -184,8 +184,9 @@ IntNotifyWinEvent(
|
|||
DWORD flags)
|
||||
{
|
||||
PEVENTHOOK pEH;
|
||||
PLIST_ENTRY pLE;
|
||||
PLIST_ENTRY ListEntry;
|
||||
PTHREADINFO pti, ptiCurrent;
|
||||
USER_REFERENCE_ENTRY Ref;
|
||||
|
||||
TRACE("IntNotifyWinEvent GlobalEvents = %p pWnd %p\n", GlobalEvents, pWnd);
|
||||
|
||||
|
@ -200,12 +201,13 @@ IntNotifyWinEvent(
|
|||
else
|
||||
pti = ptiCurrent;
|
||||
|
||||
pLE = GlobalEvents->Events.Flink;
|
||||
pEH = CONTAINING_RECORD(pLE, EVENTHOOK, Chain);
|
||||
do
|
||||
ListEntry = GlobalEvents->Events.Flink;
|
||||
ASSERT(ListEntry != &GlobalEvents->Events);
|
||||
while (ListEntry != &GlobalEvents->Events)
|
||||
{
|
||||
if (!pEH) break;
|
||||
UserReferenceObject(pEH);
|
||||
pEH = CONTAINING_RECORD(ListEntry, EVENTHOOK, Chain);
|
||||
ListEntry = ListEntry->Flink;
|
||||
|
||||
// Must be inside the event window.
|
||||
if ( Event >= pEH->eventMin && Event <= pEH->eventMax )
|
||||
{
|
||||
|
@ -217,6 +219,7 @@ IntNotifyWinEvent(
|
|||
(pEH->Flags & WINEVENT_SKIPOWNTHREAD && pEH->head.pti == pti) ||
|
||||
pEH->head.pti->rpdesk != ptiCurrent->rpdesk ) ) // Same as hooks.
|
||||
{
|
||||
UserRefObjectCo(pEH, &Ref);
|
||||
if (pEH->Flags & WINEVENT_INCONTEXT)
|
||||
{
|
||||
TRACE("In Event 0x%x, idObject %d hwnd %p\n", Event, idObject, pWnd ? UserHMGetHandle(pWnd) : NULL);
|
||||
|
@ -241,12 +244,10 @@ IntNotifyWinEvent(
|
|||
idChild,
|
||||
PtrToUint(NtCurrentTeb()->ClientId.UniqueThread));
|
||||
}
|
||||
UserDerefObjectCo(pEH);
|
||||
}
|
||||
}
|
||||
UserDereferenceObject(pEH);
|
||||
pLE = pEH->Chain.Flink;
|
||||
pEH = CONTAINING_RECORD(pLE, EVENTHOOK, Chain);
|
||||
} while (pLE != &GlobalEvents->Events);
|
||||
}
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
Loading…
Reference in a new issue