From 7acf61114da8600dc8baa629251d203030b103da Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Sun, 19 Aug 2007 05:02:31 +0000 Subject: [PATCH] Fix part two of the bug: The actual problem was that we'd overrun the end of the handle count array when decrementing. This also led to a handle leak (observed). Stop correctly when we find the handle we want. svn path=/trunk/; revision=28415 --- reactos/ntoskrnl/ob/obhandle.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reactos/ntoskrnl/ob/obhandle.c b/reactos/ntoskrnl/ob/obhandle.c index 58e751fb173..581afec4fd7 100644 --- a/reactos/ntoskrnl/ob/obhandle.c +++ b/reactos/ntoskrnl/ob/obhandle.c @@ -331,6 +331,8 @@ ObpIncrementHandleDataBase(IN POBJECT_HEADER ObjectHeader, /* Insert a new entry */ FreeEntry = ObpInsertHandleCount(ObjectHeader); if (!FreeEntry) return STATUS_INSUFFICIENT_RESOURCES; + ASSERT(!FreeEntry->Process); + ASSERT(!FreeEntry->HandleCount); /* Fill it out */ FreeEntry->Process = Process; @@ -375,6 +377,8 @@ ObpIncrementHandleDataBase(IN POBJECT_HEADER ObjectHeader, /* Allocate one */ FreeEntry = ObpInsertHandleCount(ObjectHeader); if (!FreeEntry) return STATUS_INSUFFICIENT_RESOURCES; + ASSERT(!FreeEntry->Process); + ASSERT(!FreeEntry->HandleCount); } /* Fill out the entry */ @@ -533,6 +537,7 @@ ObpDecrementHandleCount(IN PVOID ObjectBody, { /* Found it, get the process handle count */ ProcessHandleCount = HandleEntry->HandleCount--; + break; } /* Keep looping */