diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -144,6 +144,9 @@ CommandCost CmdIncreaseLoan(TileIndex ti break; } + /* Overflow protection */ + if (p->player_money + p->current_loan + loan < p->player_money) return CMD_ERROR; + if (flags & DC_EXEC) { p->player_money += loan; p->current_loan += loan; @@ -166,14 +169,14 @@ CommandCost CmdDecreaseLoan(TileIndex ti if (p->current_loan == 0) return_cmd_error(STR_702D_LOAN_ALREADY_REPAYED); - int32 loan; + Money loan; switch (p2) { default: return CMD_ERROR; // Invalid method case 0: // Pay back one step loan = min(p->current_loan, (IsHumanPlayer(_current_player) || _patches.ainew_active) ? LOAN_INTERVAL : LOAN_INTERVAL_OLD_AI); break; case 1: // Pay back as much as possible - loan = max(min(p->current_loan, p->player_money), (int32)LOAN_INTERVAL); + loan = max(min(p->current_loan, p->player_money), (Money)LOAN_INTERVAL); loan -= loan % LOAN_INTERVAL; break; } @@ -304,7 +307,7 @@ CommandCost CmdMoneyCheat(TileIndex tile CommandCost CmdGiveMoney(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) { const Player *p = GetPlayer(_current_player); - CommandCost amount((Money)min(p1, 20000000LL)); + CommandCost amount(min((Money)p1, 20000000LL)); SET_EXPENSES_TYPE(EXPENSES_OTHER);