Skip to content

Commit 4c85403

Browse files
authored
[GEN][ZH] Prevent reading invalid data from 'm_numLevelPresets' in GameLODManager::newLODPreset() (#1150)
1 parent b1b16b9 commit 4c85403

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

Generals/Code/GameEngine/Source/Common/GameLOD.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,13 +253,17 @@ BenchProfile *GameLODManager::newBenchProfile(void)
253253

254254
LODPresetInfo *GameLODManager::newLODPreset(StaticGameLODLevel index)
255255
{
256-
if (m_numLevelPresets[index] < MAX_LOD_PRESETS_PER_LEVEL)
257-
{
258-
m_numLevelPresets[index]++;
259-
return &m_lodPresets[index][m_numLevelPresets[index]-1];
256+
if (index >= 0 && index < STATIC_GAME_LOD_COUNT)
257+
{
258+
if (m_numLevelPresets[index] < MAX_LOD_PRESETS_PER_LEVEL)
259+
{
260+
m_numLevelPresets[index]++;
261+
return &m_lodPresets[index][m_numLevelPresets[index]-1];
262+
}
263+
264+
DEBUG_CRASH(( "GameLODManager::newLODPreset - Too many presets defined for '%s'\n", TheGameLODManager->getStaticGameLODLevelName(index)));
260265
}
261266

262-
DEBUG_CRASH(( "GameLODManager::newLODPreset - Too many presets defined for '%s'\n", TheGameLODManager->getStaticGameLODLevelName(index)));
263267
return NULL;
264268
}
265269

GeneralsMD/Code/GameEngine/Source/Common/GameLOD.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,17 @@ BenchProfile *GameLODManager::newBenchProfile(void)
255255

256256
LODPresetInfo *GameLODManager::newLODPreset(StaticGameLODLevel index)
257257
{
258-
if (m_numLevelPresets[index] < MAX_LOD_PRESETS_PER_LEVEL)
259-
{
260-
m_numLevelPresets[index]++;
261-
return &m_lodPresets[index][m_numLevelPresets[index]-1];
258+
if (index >= 0 && index < STATIC_GAME_LOD_COUNT)
259+
{
260+
if (m_numLevelPresets[index] < MAX_LOD_PRESETS_PER_LEVEL)
261+
{
262+
m_numLevelPresets[index]++;
263+
return &m_lodPresets[index][m_numLevelPresets[index]-1];
264+
}
265+
266+
DEBUG_CRASH(( "GameLODManager::newLODPreset - Too many presets defined for '%s'\n", TheGameLODManager->getStaticGameLODLevelName(index)));
262267
}
263268

264-
DEBUG_CRASH(( "GameLODManager::newLODPreset - Too many presets defined for '%s'\n", TheGameLODManager->getStaticGameLODLevelName(index)));
265269
return NULL;
266270
}
267271

0 commit comments

Comments
 (0)