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( pool )
{ {
if( Mem_ReadSentinel( data ) == MEMHEADER_SENTINEL_SMALL ) 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 ));
memheader_small_t *target = (memheader_small_t *)((byte *)data - sizeof( memheader_small_t ));
for( memheader_small_t *header = pool->chain_small; header; header = header->next ) for( memheader_t *header = pool->chain; header; header = header->next )
{ {
if( header == target ) if( header == target_big )
return true; return true;
}
} }
else
{
memheader_t *target = (memheader_t *)((byte *)data - sizeof( memheader_t ));
for( memheader_t *header = pool->chain; header; header = header->next ) for( memheader_small_t *header = pool->chain_small; header; header = header->next )
{ {
if( header == target ) if( header == target_small )
return true; return true;
}
} }
} }
else else