diff --git a/regression/regression/main.nut b/regression/regression/main.nut index 5aafaa4e71..7621c49c6f 100644 --- a/regression/regression/main.nut +++ b/regression/regression/main.nut @@ -1703,6 +1703,7 @@ function Regression::Vehicle() print(" BuildVehicle(): " + AIVehicle.BuildVehicle(33417, 153)); print(" IsValidVehicle(12): " + AIVehicle.IsValidVehicle(12)); print(" CloneVehicle(): " + AIVehicle.CloneVehicle(33417, 12, true)); + print(" BuildVehicle(): " + AIVehicle.BuildVehicle(-1, 153)); local bank_after = AICompany.GetBankBalance(AICompany.COMPANY_SELF); diff --git a/regression/regression/result.txt b/regression/regression/result.txt index d9b946f71a..dc3e294844 100644 --- a/regression/regression/result.txt +++ b/regression/regression/result.txt @@ -9295,6 +9295,7 @@ ERROR: IsEnd() is invalid as Begin() is never called BuildVehicle(): 12 IsValidVehicle(12): true CloneVehicle(): 13 + BuildVehicle(): 1048575 --Accounting-- GetCosts(): 11894 Should be: 11894 diff --git a/src/script/api/script_object.hpp b/src/script/api/script_object.hpp index 5fffe783b2..96c78acb7f 100644 --- a/src/script/api/script_object.hpp +++ b/src/script/api/script_object.hpp @@ -333,6 +333,9 @@ bool ScriptObject::ScriptDoCommandHelper tile = std::get<0>(args); } + /* Do not even think about executing out-of-bounds tile-commands. */ + if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (GetCommandFlags() & CMD_ALL_TILES) == 0))) return false; + /* Only set ClientID parameters when the command does not come from the network. */ if constexpr ((::GetCommandFlags() & CMD_CLIENT_ID) != 0) ScriptObjectInternal::SetClientIds(args, std::index_sequence_for{});