Mercurial > hg > openttd
changeset 18030:885fa3a8d835 draft
(svn r22845) -Fix [FS#4745]: perform stricter checks on some commands (monoid)
author | rubidium <rubidium@openttd.org> |
---|---|
date | Fri, 26 Aug 2011 16:39:02 +0000 |
parents | cf168b888da8 |
children | decc7318b960 |
files | src/autoreplace_cmd.cpp src/network/network_command.cpp src/order_cmd.cpp src/vehicle_cmd.cpp |
diffstat | 4 files changed, 6 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -731,7 +731,7 @@ GroupID id_g = GB(p1, 16, 16); CommandCost cost; - if (!Group::IsValidID(id_g) && !IsAllGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR; + if (Group::IsValidID(id_g) ? Group::Get(id_g)->owner != _current_company : !IsAllGroupID(id_g) && !IsDefaultGroupID(id_g)) return CMD_ERROR; if (!Engine::IsValidID(old_engine_type)) return CMD_ERROR; if (new_engine_type != INVALID_ENGINE) {
--- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -308,7 +308,7 @@ if (!IsValidCommand(cp->cmd)) return "invalid command"; if (GetCommandFlags(cp->cmd) & CMD_OFFLINE) return "offline only command"; if ((cp->cmd & CMD_FLAGS_MASK) != 0) return "invalid command flag"; - if (callback > lengthof(_callback_table)) return "invalid callback"; + if (callback >= lengthof(_callback_table)) return "invalid callback"; cp->callback = _callback_table[callback]; return NULL;
--- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -727,10 +727,10 @@ case OT_CONDITIONAL: { VehicleOrderID skip_to = new_order.GetConditionSkipToOrder(); if (skip_to != 0 && skip_to >= v->GetNumOrders()) return CMD_ERROR; // Always allow jumping to the first (even when there is no order). - if (new_order.GetConditionVariable() > OCV_END) return CMD_ERROR; + if (new_order.GetConditionVariable() >= OCV_END) return CMD_ERROR; OrderConditionComparator occ = new_order.GetConditionComparator(); - if (occ > OCC_END) return CMD_ERROR; + if (occ >= OCC_END) return CMD_ERROR; switch (new_order.GetConditionVariable()) { case OCV_REQUIRES_SERVICE: if (occ != OCC_IS_TRUE && occ != OCC_IS_FALSE) return CMD_ERROR;
--- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -524,10 +524,11 @@ CommandCost cost(EXPENSES_NEW_VEHICLES); VehicleType vehicle_type = Extract<VehicleType, 0, 3>(p1); - uint sell_command = GetCmdSellVeh(vehicle_type); if (!IsCompanyBuildableVehicleType(vehicle_type)) return CMD_ERROR; + uint sell_command = GetCmdSellVeh(vehicle_type); + /* Get the list of vehicles in the depot */ BuildDepotVehicleList(vehicle_type, tile, &list, &list);