diff --git a/sdk/lib/rtl/heap.c b/sdk/lib/rtl/heap.c index 847051df44c..6c9f040bf0f 100644 --- a/sdk/lib/rtl/heap.c +++ b/sdk/lib/rtl/heap.c @@ -2277,6 +2277,7 @@ BOOLEAN NTAPI RtlFreeHeap( PHEAP_VIRTUAL_ALLOC_ENTRY VirtualEntry; BOOLEAN Locked = FALSE; NTSTATUS Status; + BOOL b = FALSE; /* Freeing NULL pointer is a legal operation */ if (!Ptr) return TRUE; @@ -2301,20 +2302,28 @@ BOOLEAN NTAPI RtlFreeHeap( (HeapEntry->SegmentOffset >= HEAP_SEGMENTS)) { /* This is an invalid block */ + b = TRUE; DPRINT1("HEAP: Trying to free an invalid address %p!\n", Ptr); RtlSetLastWin32ErrorAndNtStatusFromNtStatus(STATUS_INVALID_PARAMETER); - _SEH2_YIELD(return FALSE); + //_SEH2_YIELD(return FALSE); } } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { + b = TRUE; /* The pointer was invalid */ DPRINT1("HEAP: Trying to free an invalid address %p!\n", Ptr); RtlSetLastWin32ErrorAndNtStatusFromNtStatus(STATUS_INVALID_PARAMETER); - _SEH2_YIELD(return FALSE); + //_SEH2_YIELD(return FALSE); } _SEH2_END; + if (b) + { + __debugbreak(); + return FALSE; + } + /* Lock if necessary */ if (!(Flags & HEAP_NO_SERIALIZE)) {