From 02f7a257535518511ce8f5c80cbf705aa3c4b536 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Fri, 18 Jan 2008 10:37:37 +0000 Subject: [PATCH] rpcrt4: Fix memory leak in NdrFullPointerXlatFree. First of all, the code was freeing the wrong pointer (i.e. the pointer supplied by the caller of one of the NdrFullPointer* functions, not the PFULL_PTR_TO_REFID_ELEMENT. Second, the code wasn't following the Next link to the next entry in the list. svn path=/trunk/; revision=31852 --- reactos/dll/win32/rpcrt4/ndr_fullpointer.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/rpcrt4/ndr_fullpointer.c b/reactos/dll/win32/rpcrt4/ndr_fullpointer.c index 3586bc39e30..307e54540d0 100644 --- a/reactos/dll/win32/rpcrt4/ndr_fullpointer.c +++ b/reactos/dll/win32/rpcrt4/ndr_fullpointer.c @@ -68,8 +68,17 @@ void WINAPI NdrFullPointerXlatFree(PFULL_PTR_XLAT_TABLES pXlatTables) TRACE("(%p)\n", pXlatTables); /* free the entries in the table */ - for (i = 0; i < pXlatTables->RefIdToPointer.NumberOfEntries; i++) - HeapFree(GetProcessHeap(), 0, pXlatTables->RefIdToPointer.XlatTable[i]); + for (i = 0; i < pXlatTables->PointerToRefId.NumberOfBuckets; i++) + { + PFULL_PTR_TO_REFID_ELEMENT XlatTableEntry; + for (XlatTableEntry = pXlatTables->PointerToRefId.XlatTable[i]; + XlatTableEntry; ) + { + PFULL_PTR_TO_REFID_ELEMENT Next = XlatTableEntry->Next; + HeapFree(GetProcessHeap(), 0, XlatTableEntry); + XlatTableEntry = Next; + } + } HeapFree(GetProcessHeap(), 0, pXlatTables->RefIdToPointer.XlatTable); HeapFree(GetProcessHeap(), 0, pXlatTables->RefIdToPointer.StateTable);