diff --git a/Generals/Code/GameEngine/Source/Common/GlobalData.cpp b/Generals/Code/GameEngine/Source/Common/GlobalData.cpp index 78e844ffbaf..25ea99baa95 100644 --- a/Generals/Code/GameEngine/Source/Common/GlobalData.cpp +++ b/Generals/Code/GameEngine/Source/Common/GlobalData.cpp @@ -1198,6 +1198,13 @@ void GlobalData::parseGameDataDefinition( INI* ini ) TheWritableGlobalData->m_showMoneyPerMinute = optionPref.getShowMoneyPerMinute(); Int val=optionPref.getGammaValue(); + + // Clamp val to valid range to prevent division by zero or invalid calculations + if (val < 0) + val = 0; + if (val > 100) + val = 100; + //generate a value between 0.6 and 2.0. if (val < 50) { //darker gamma diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index 3703a64f022..e4e5f03d332 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -820,6 +820,13 @@ Real OptionPreferences::getGammaValue(void) return 50.0f; Real gamma = (Real) atoi(it->second.str()); + + // Clamp gamma value to valid range to prevent crashes from corrupted Options.ini + if (gamma < 0.0f) + gamma = 0.0f; + if (gamma > 100.0f) + gamma = 100.0f; + return gamma; } diff --git a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp index 17cecf6bc09..2aff5e03d25 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp @@ -1236,6 +1236,13 @@ void GlobalData::parseGameDataDefinition( INI* ini ) TheWritableGlobalData->m_showMoneyPerMinute = optionPref.getShowMoneyPerMinute(); Int val=optionPref.getGammaValue(); + + // Clamp val to valid range to prevent division by zero or invalid calculations + if (val < 0) + val = 0; + if (val > 100) + val = 100; + //generate a value between 0.6 and 2.0. if (val < 50) { //darker gamma diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index 16e2cc03111..bfe73afedfb 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -865,6 +865,13 @@ Real OptionPreferences::getGammaValue(void) return 50.0f; Real gamma = (Real) atoi(it->second.str()); + + // Clamp gamma value to valid range to prevent crashes from corrupted Options.ini + if (gamma < 0.0f) + gamma = 0.0f; + if (gamma > 100.0f) + gamma = 100.0f; + return gamma; }