From: Jinoh Kang jinoh.kang.kr@gmail.com
--- dlls/ntdll/heap.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c index 70926109547..1c79d963399 100644 --- a/dlls/ntdll/heap.c +++ b/dlls/ntdll/heap.c @@ -1192,6 +1192,34 @@ static BOOL heap_validate( const struct heap *heap ) } }
+ if (heap->pending_free) + { + unsigned int i, end; + + for (i = 0; i < MAX_FREE_PENDING; i++) + { + if (!(block = heap->pending_free[i])) break; + + subheap = block_get_subheap( heap, block ); + if (!validate_used_block( heap, subheap, block )) return FALSE; + if (block_get_type( block ) != BLOCK_TYPE_DEAD) + { + WARN("heap %p, block %p: invalid block type %#x\n", heap, block, block_get_type( block )); + return FALSE; + } + } + end = i; + + for (; i < MAX_FREE_PENDING; i++) + { + if ((block = heap->pending_free[i])) + { + WARN("heap %p: non-NULL delayed freed block %p at slot %u (list ends at slot %u)\n", heap, block, i, end); + return FALSE; + } + } + } + LIST_FOR_EACH_ENTRY( large_arena, &heap->large_list, ARENA_LARGE, entry ) if (!validate_large_block( heap, &large_arena->block )) return FALSE;