summaryrefslogtreecommitdiff
path: root/src/misc_cmd.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-06-19 00:05:26 +0000
committerrubidium <rubidium@openttd.org>2007-06-19 00:05:26 +0000
commitf765b3d6aa70eae559d02cda947e6ff5e18b8c1a (patch)
treeb07b07a2f5f04c71f8608530c990ebe9bdf603e1 /src/misc_cmd.cpp
parent623a848cca99d7686f4e594fea4573d5bb40ed32 (diff)
downloadopenttd-f765b3d6aa70eae559d02cda947e6ff5e18b8c1a.tar.xz
(svn r10212) -Fix [FS#723]: money overflow bugs in many locations.
Diffstat (limited to 'src/misc_cmd.cpp')
-rw-r--r--src/misc_cmd.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp
index ecbf5d8bf..69ecbf29d 100644
--- a/src/misc_cmd.cpp
+++ b/src/misc_cmd.cpp
@@ -144,6 +144,9 @@ CommandCost CmdIncreaseLoan(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
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 tile, uint32 flags, uint32 p1, uint32 p2)
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, uint32 flags, uint32 p1, uint32 p2)
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);