From 72335a09a97adef53d515dde21f08bdc231fdcef Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Thu, 15 Feb 2024 01:10:23 +0000 Subject: [PATCH] [*] Harden AuCastPointer --- Include/Aurora/Memory/Heap.hpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/Include/Aurora/Memory/Heap.hpp b/Include/Aurora/Memory/Heap.hpp index 997fccd1..0abacc6e 100644 --- a/Include/Aurora/Memory/Heap.hpp +++ b/Include/Aurora/Memory/Heap.hpp @@ -134,6 +134,26 @@ namespace Aurora::Memory pHeap->_Free(pVoids); } + + template + static void DeleteThatCastedOnce(T *pThat) + { + static const auto kAlignment = AuMax(alignof(T), sizeof(void *)); + + auto pBaseClass = AuStaticCast(pThat); + + if constexpr (AuIsClass_v + #if !defined(AURT_HEAP_NO_STL) + && !std::is_trivially_destructible_v + #endif + ) + { + pBaseClass->~Z(); + } + + auto &pHeap = *(Heap **)(((char *)pBaseClass) - kAlignment); + pHeap->_Free(&pHeap); + } template static void RetardedSpecWrittenByRetards(T *pThat) @@ -354,10 +374,13 @@ namespace Aurora::Memory { return NullUniquePointer(); } + else if (pInPointer.get_deleter() == &Heap::DeleteThat) + { + return AuUPtr)>(AuStaticCast(pInPointer.release()), &Heap::DeleteThatCastedOnce); + } else { - auto deleter = decltype(&Heap::DeleteThat)(pInPointer.get_deleter()); - return AuUPtr)>(AuStaticCast(pInPointer.release()), deleter); + return NullUniquePointer(); } }