From 4d16267416eb6a25a79060a8f6363772079fec95 Mon Sep 17 00:00:00 2001 From: jaburns Date: Wed, 28 Oct 2020 14:08:22 -0600 Subject: [PATCH] Prevent double free on mario state --- src/libsm64.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/libsm64.c b/src/libsm64.c index e4f58fd..68400af 100644 --- a/src/libsm64.c +++ b/src/libsm64.c @@ -185,6 +185,12 @@ SM64_LIB_FN uint32_t sm64_mario_create( int16_t x, int16_t y, int16_t z ) SM64_LIB_FN void sm64_mario_tick( uint32_t marioId, const struct SM64MarioInputs *inputs, struct SM64MarioState *outState, struct SM64MarioGeometryBuffers *outBuffers ) { + if( marioId >= s_mario_instance_pool.size || s_mario_instance_pool.objects[marioId] == NULL ) + { + DEBUG_PRINT("Tried to tick non-existant Mario with ID: %u", marioId); + return; + } + global_state_bind( ((struct MarioInstance *)s_mario_instance_pool.objects[ marioId ])->globalState ); update_button( inputs->buttonA, A_BUTTON ); @@ -213,6 +219,12 @@ SM64_LIB_FN void sm64_mario_tick( uint32_t marioId, const struct SM64MarioInputs SM64_LIB_FN void sm64_mario_delete( uint32_t marioId ) { + if( marioId >= s_mario_instance_pool.size || s_mario_instance_pool.objects[marioId] == NULL ) + { + DEBUG_PRINT("Tried to delete non-existant Mario with ID: %u", marioId); + return; + } + struct GlobalState *globalState = ((struct MarioInstance *)s_mario_instance_pool.objects[ marioId ])->globalState; global_state_bind( globalState );