Added pointer value test to MemoryPool

Former-commit-id: 2051f2e5b8f45513d6050dbdb17287841e5394a5
This commit is contained in:
Lynix 2014-06-05 21:31:29 +02:00
parent a31ced1d76
commit 31dba6f52c
1 changed files with 12 additions and 2 deletions

View File

@ -63,11 +63,21 @@ void NzMemoryPool<typeSize, count, canGrow>::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<nzUInt8*>(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();