From 31dba6f52caef732884937710b7753dc57a61ecf Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 5 Jun 2014 21:31:29 +0200 Subject: [PATCH] Added pointer value test to MemoryPool Former-commit-id: 2051f2e5b8f45513d6050dbdb17287841e5394a5 --- include/Nazara/Core/MemoryPool.inl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/include/Nazara/Core/MemoryPool.inl b/include/Nazara/Core/MemoryPool.inl index 21c07a828..592fb38fc 100644 --- a/include/Nazara/Core/MemoryPool.inl +++ b/include/Nazara/Core/MemoryPool.inl @@ -63,11 +63,21 @@ void NzMemoryPool::Free(void* ptr) if (ptr) { // Le pointer nous appartient-il ? - if (ptr >= m_pool.get() && ptr < m_pool.get() + typeSize*count) + nzUInt8* freePtr = static_cast(ptr); + nzUInt8* poolPtr = m_pool.get(); + if (freePtr >= poolPtr && freePtr < poolPtr + typeSize*count) { + #if NAZARA_CORE_SAFE + if ((freePtr - poolPtr) % typeSize != 0) + { + throw std::runtime_error("Pointer does not belong to memory pool"); + return; + } + #endif + m_freeList[m_freeCount++] = ptr; - // Si nous somme vide et l'extension d'un autre pool, on se suicide + // Si nous sommes vide et l'extension d'un autre pool, on se suicide if (m_freeCount == count && m_previous && !m_next) { m_previous->m_next.release();