From e94499c2e44e8c5923c6f3101616791377fc391b Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 08:58:46 +0000 Subject: [PATCH] bugfix(GUI): Prevent division by zero in skill points progress bar --- .../GameClient/GUI/ControlBar/ControlBar.cpp | 22 +++++++++++++++---- .../GameClient/GUI/ControlBar/ControlBar.cpp | 22 +++++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp index 9d7f4cd7e72..41837b24ca0 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp @@ -409,8 +409,15 @@ void ControlBar::populatePurchaseScience( Player* player ) win = TheWindowManager->winGetWindowFromId( m_contextParent[ CP_PURCHASE_SCIENCE ], TheNameKeyGenerator->nameToKey( "GeneralsExpPoints.wnd:ProgressBarExperience" ) ); if(win) { - Int progress; - progress = ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) /(player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown()); + Int progress = 0; + Int skillPointsRequired = player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown(); + + // TheSuperHackers @bugfix Mauller 04/05/2025 Prevent possible division by zero + if ( skillPointsRequired > 0 ) + { + progress = ( ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) / skillPointsRequired ); + } + GadgetProgressBarSetProgress(win, progress); } @@ -468,8 +475,15 @@ void ControlBar::updateContextPurchaseScience() win = TheWindowManager->winGetWindowFromId( m_contextParent[ CP_PURCHASE_SCIENCE ], TheNameKeyGenerator->nameToKey( "GeneralsExpPoints.wnd:ProgressBarExperience" ) ); if(win) { - Int progress; - progress = ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) /(player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown()); + Int progress = 0; + Int skillPointsRequired = player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown(); + + // TheSuperHackers @bugfix Mauller 04/05/2025 Prevent possible division by zero + if ( skillPointsRequired > 0 ) + { + progress = ( ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) / skillPointsRequired ); + } + GadgetProgressBarSetProgress(win, progress); } diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp index f07e61c8caf..a336166d9a4 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp @@ -413,8 +413,15 @@ void ControlBar::populatePurchaseScience( Player* player ) win = TheWindowManager->winGetWindowFromId( m_contextParent[ CP_PURCHASE_SCIENCE ], TheNameKeyGenerator->nameToKey( "GeneralsExpPoints.wnd:ProgressBarExperience" ) ); if(win) { - Int progress; - progress = ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) /(player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown()); + Int progress = 0; + Int skillPointsRequired = player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown(); + + // TheSuperHackers @bugfix Mauller 04/05/2025 Prevent possible division by zero + if ( skillPointsRequired > 0 ) + { + progress = ( ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) / skillPointsRequired ); + } + GadgetProgressBarSetProgress(win, progress); } @@ -472,8 +479,15 @@ void ControlBar::updateContextPurchaseScience() win = TheWindowManager->winGetWindowFromId( m_contextParent[ CP_PURCHASE_SCIENCE ], TheNameKeyGenerator->nameToKey( "GeneralsExpPoints.wnd:ProgressBarExperience" ) ); if(win) { - Int progress; - progress = ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) /(player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown()); + Int progress = 0; + Int skillPointsRequired = player->getSkillPointsLevelUp() - player->getSkillPointsLevelDown(); + + // TheSuperHackers @bugfix Mauller 04/05/2025 Prevent possible division by zero + if ( skillPointsRequired > 0 ) + { + progress = ( ((player->getSkillPoints() - player->getSkillPointsLevelDown()) * 100) / skillPointsRequired ); + } + GadgetProgressBarSetProgress(win, progress); }