From f68b37b245784af487a18aa59356e5af80fe5504 Mon Sep 17 00:00:00 2001 From: ToyB-Chan Date: Mon, 8 Jun 2026 19:48:22 +0200 Subject: [PATCH] added double free fault --- minimal_heap.h | 3 +-- minimal_heap_implementation.inl | 10 ++++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/minimal_heap.h b/minimal_heap.h index a89c758..8172c10 100644 --- a/minimal_heap.h +++ b/minimal_heap.h @@ -39,8 +39,7 @@ void MIHP_PlatformOnHeapCorruptionDetected(struct _MIHP_HeapCorruptionInfo info) #define MIHP_HEAP_CORRUPTION_TYPE_MEMORY_AREA_CHECKSUM_MISMATCH 0 #define MIHP_HEAP_CORRUPTION_TYPE_SEGMENT_CHECKSUM_MISMATCH 1 -#define MIHP_HEAP_CORRUPTION_TYPE_FRONT_CANARY_MISMATCH 2 -#define MIHP_HEAP_CORRUPTION_TYPE_REAR_CANARY_MISMATCH 3 +#define MIHP_HEAP_CORRUPTION_TYPE_DOUBLE_FREE 2 typedef struct _MIHP_HeapConfig { diff --git a/minimal_heap_implementation.inl b/minimal_heap_implementation.inl index 592935e..5eec40d 100644 --- a/minimal_heap_implementation.inl +++ b/minimal_heap_implementation.inl @@ -254,6 +254,16 @@ bool MIHP_Free(MIHP_Heap* heap, void* ptr) MIHP_HeapMemoryAreaHeader* area = segment->OwningMemoryArea; MIHP_ValidateHeapMemoryAreaHeader(heap, area); + if (segment->OccupiedSize == 0) + { + MIHP_HeapCorruptionInfo corruptionInfo = {0}; + corruptionInfo.Heap = heap; + corruptionInfo.Type = MIHP_HEAP_CORRUPTION_TYPE_DOUBLE_FREE; + corruptionInfo.Ptr = ptr; + + MIHP_PlatformOnHeapCorruptionDetected(corruptionInfo); + } + segment->OccupiedSize = 0; segment->Checksum = MIHP_GenerateHeapSegmentChecksum(segment);