diff --git a/src/engine/surface_load.c b/src/engine/surface_load.c index 385d48430..2422a5487 100644 --- a/src/engine/surface_load.c +++ b/src/engine/surface_load.c @@ -764,6 +764,10 @@ void load_object_collision_model(void) { LOG_ERROR("Object collisions had invalid vertex count"); return; } + if (numVertices >= 4096) { + LOG_ERROR("Object collisions had too many vertices"); + return; + } static s32 sVertexDataCount = 0; static s16* sVertexData = NULL; diff --git a/src/game/memory.c b/src/game/memory.c index 01f1f3d2a..82c0bfc8a 100644 --- a/src/game/memory.c +++ b/src/game/memory.c @@ -135,13 +135,19 @@ void* growing_pool_alloc(struct GrowingPool *pool, u32 size) { } // search for space in nodes - struct GrowingPoolNode* node = pool->tail; - u32 depth = 0; - while (node) { - depth++; - s64 freeSpace = (s64)pool->nodeSize - (s64)node->usedSpace; - if (freeSpace > size) { break; } - node = node->prev; + struct GrowingPoolNode* node = NULL; + if (size < pool->nodeSize) { + node = pool->tail; + u32 depth = 0; + while (node && depth < 128) { + depth++; + s64 freeSpace = (s64)pool->nodeSize - (s64)node->usedSpace; + if (freeSpace > size) { break; } + node = node->prev; + } + if (depth >= 128) { + node = NULL; + } } // allocate new node