From ffea0d65f2b4e93764b7ab0a40a35dd77daec73a Mon Sep 17 00:00:00 2001 From: Sergeanur Date: Fri, 4 Aug 2017 12:45:06 +0300 Subject: [PATCH] Fixed CModelInfoSA exceeding an array boundaries --- Client/game_sa/CModelInfoSA.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Client/game_sa/CModelInfoSA.cpp b/Client/game_sa/CModelInfoSA.cpp index 30ddd5ce39e..dd78be3b31b 100644 --- a/Client/game_sa/CModelInfoSA.cpp +++ b/Client/game_sa/CModelInfoSA.cpp @@ -484,17 +484,21 @@ BOOL CModelInfoSA::IsLoaded ( ) BOOL CModelInfoSA::DoIsLoaded ( ) { - DEBUG_TRACE("BOOL CModelInfoSA::IsLoaded ( )"); + DEBUG_TRACE("BOOL CModelInfoSA::DoIsLoaded ( )"); //return (BOOL)*(BYTE *)(ARRAY_ModelLoaded + 20*dwModelID); BOOL bLoaded = pGame->GetStreaming()->HasModelLoaded(m_dwModelID); - m_pInterface = ppModelInfo [ m_dwModelID ]; - if ( bLoaded && m_dwModelID < 20000 ) + if ( m_dwModelID < 20000 ) { - // Check rw object is there - if ( !m_pInterface || !m_pInterface->pRwObject ) - return false; + m_pInterface = ppModelInfo[m_dwModelID]; + + if ( bLoaded ) + { + // Check rw object is there + if (!m_pInterface || !m_pInterface->pRwObject) + return false; + } } return bLoaded; } @@ -531,6 +535,7 @@ CBoundingBox * CModelInfoSA::GetBoundingBox ( ) bool CModelInfoSA::IsValid ( ) { + if ( m_dwModelID >= 20000 && m_dwModelID < MODELINFO_MAX ) return true; return ppModelInfo [ m_dwModelID ] != 0; }