From 31a913fde76bf4b17e210e37f15fdf3148cabca4 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Mon, 14 Feb 2005 11:46:17 +0000 Subject: [PATCH] don't leak a reference to the timer object when copying to the buffer failed in NtQueryTimer() and don't use uninitialized variable in NtSetTimer() svn path=/trunk/; revision=13556 --- reactos/ntoskrnl/ex/timer.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/reactos/ntoskrnl/ex/timer.c b/reactos/ntoskrnl/ex/timer.c index 00ba8cb94e2..0a0234a061e 100644 --- a/reactos/ntoskrnl/ex/timer.c +++ b/reactos/ntoskrnl/ex/timer.c @@ -483,22 +483,27 @@ NtQueryTimer(IN HANDLE TimerHandle, /* Check for Success */ if(NT_SUCCESS(Status)) { - /* Return the Basic Information */ - _SEH_TRY { - - /* FIXME: Interrupt correction based on Interrupt Time */ - DPRINT("Returning Information for Timer: %x. Time Remaining: %d\n", Timer, Timer->KeTimer.DueTime.QuadPart); - BasicInfo->TimeRemaining.QuadPart = Timer->KeTimer.DueTime.QuadPart; - BasicInfo->SignalState = KeReadStateTimer(&Timer->KeTimer); - ObDereferenceObject(Timer); + switch(TimerInformationClass) { + case TimerBasicInformation: { + /* Return the Basic Information */ + _SEH_TRY { - if(ReturnLength != NULL) { - *ReturnLength = sizeof(TIMER_BASIC_INFORMATION); - } + /* FIXME: Interrupt correction based on Interrupt Time */ + DPRINT("Returning Information for Timer: %x. Time Remaining: %d\n", Timer, Timer->KeTimer.DueTime.QuadPart); + BasicInfo->TimeRemaining.QuadPart = Timer->KeTimer.DueTime.QuadPart; + BasicInfo->SignalState = KeReadStateTimer(&Timer->KeTimer); + + if(ReturnLength != NULL) { + *ReturnLength = sizeof(TIMER_BASIC_INFORMATION); + } + + } _SEH_HANDLE { + Status = _SEH_GetExceptionCode(); + } _SEH_END; + } + } - } _SEH_HANDLE { - Status = _SEH_GetExceptionCode(); - } _SEH_END; + ObDereferenceObject(Timer); } /* Return Status */ @@ -517,7 +522,7 @@ NtSetTimer(IN HANDLE TimerHandle, { PETIMER Timer; KIRQL OldIrql; - BOOLEAN KillTimer; + BOOLEAN KillTimer = FALSE; BOOLEAN State; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); PETHREAD CurrentThread = PsGetCurrentThread();