diff --git a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp index f71bccd308b..a5a92ed40a8 100644 --- a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp +++ b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp @@ -209,6 +209,10 @@ void W3DParticleSystemManager::doParticles(RenderInfoClass &rinfo) TextureClass *texture = W3DDisplay::m_assetManager->Get_Texture( sys->getParticleTypeName().str() ); + // Skip rendering if texture is null or invalid (use-after-free protection) + if ( !texture ) + continue; + if ( m_streakLine && sys->isUsingStreak() && (count >= 2) ) { m_streakLine->Reset_Line(); diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp index 8920c2338d0..537509b40ac 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DParticleSys.cpp @@ -248,6 +248,10 @@ void W3DParticleSystemManager::doParticles(RenderInfoClass &rinfo) TextureClass *texture = W3DDisplay::m_assetManager->Get_Texture( sys->getParticleTypeName().str() ); + // Skip rendering if texture is null or invalid (use-after-free protection) + if ( !texture ) + continue; + if ( m_streakLine && sys->isUsingStreak() && (count >= 2) ) { m_streakLine->Reset_Line();