engine: zone: in CheckAlloc walk through over both allocation chains, so that we don't read out of bounds if passed pointer is not allocated by zone allocator

This commit is contained in:
Alibek Omarov
2026-05-16 12:56:45 +05:00
parent 9ee6be87d7
commit d305292340

View File

@@ -576,25 +576,19 @@ static qboolean Mem_CheckAlloc( mempool_t *pool, void *data )
{
if( pool )
{
if( Mem_ReadSentinel( data ) == MEMHEADER_SENTINEL_SMALL )
{
memheader_small_t *target = (memheader_small_t *)((byte *)data - sizeof( memheader_small_t ));
memheader_t *target_big = (memheader_t *)((byte *)data - sizeof( memheader_t ));
memheader_small_t *target_small = (memheader_small_t *)((byte *)data - sizeof( memheader_small_t ));
for( memheader_small_t *header = pool->chain_small; header; header = header->next )
{
if( header == target )
return true;
}
for( memheader_t *header = pool->chain; header; header = header->next )
{
if( header == target_big )
return true;
}
else
{
memheader_t *target = (memheader_t *)((byte *)data - sizeof( memheader_t ));
for( memheader_t *header = pool->chain; header; header = header->next )
{
if( header == target )
return true;
}
for( memheader_small_t *header = pool->chain_small; header; header = header->next )
{
if( header == target_small )
return true;
}
}
else