From 4a8c7295a76710f2ade843460f43c3e53147c91c Mon Sep 17 00:00:00 2001 From: Mark Chandler Date: Mon, 1 Dec 2025 13:39:44 -0800 Subject: [PATCH] Fix crash if obj vector is reset before all objects are removed Check for invalid obj ideas before adding to obj vector --- .../Source/GameLogic/System/GameLogic.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index 57d2115d991..ac249585936 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -3878,6 +3878,11 @@ void GameLogic::addObjectToLookupTable( Object *obj ) // add to lookup // m_objHash[ obj->getID() ] = obj; ObjectID newID = obj->getID(); + + if (newID == INVALID_ID) { + return; + } + while( newID >= m_objVector.size() ) // Fail case is hella rare, so faster to double up on size() call m_objVector.resize(m_objVector.size() * 2, NULL); @@ -3897,7 +3902,15 @@ void GameLogic::removeObjectFromLookupTable( Object *obj ) // remove from lookup table // m_objHash.erase( obj->getID() ); - m_objVector[ obj->getID() ] = NULL; + ObjectID id = obj->getID(); + + if (id == INVALID_ID) { + return; + } + + if (id < m_objVector.size() && m_objVector[ id ] == obj) { + m_objVector[ id ] = NULL; + } } // end removeObjectFromLookupTable