Last active
July 8, 2022 20:13
-
-
Save michicc/fb2e89df61c1d1a723ac70364bef9403 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/command.cpp b/src/command.cpp | |
index 007fce35c3..65e5acf10c 100644 | |
--- a/src/command.cpp | |
+++ b/src/command.cpp | |
@@ -287,9 +287,6 @@ void CommandHelperBase::LogCommandExecution(Commands cmd, StringID err_message, | |
*/ | |
bool CommandHelperBase::InternalExecutePrepTest(CommandFlags cmd_flags, TileIndex tile, Backup<CompanyID> &cur_company) | |
{ | |
- /* Do not even think about executing out-of-bounds tile-commands */ | |
- if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (cmd_flags & CMD_ALL_TILES) == 0))) return false; | |
- | |
/* Always execute server and spectator commands as spectator */ | |
bool exec_as_spectator = (cmd_flags & (CMD_SPECTATOR | CMD_SERVER)) != 0; | |
diff --git a/src/command_func.h b/src/command_func.h | |
index 861dd480b2..d78c8229a4 100644 | |
--- a/src/command_func.h | |
+++ b/src/command_func.h | |
@@ -222,6 +222,12 @@ struct CommandHelper<Tcmd, Tret(*)(DoCommandFlag, Targs...), true> : protected C | |
template <typename Tcallback> | |
static bool PostFromNet(StringID err_message, Tcallback *callback, bool my_cmd, TileIndex location, std::tuple<Targs...> args) | |
{ | |
+ if constexpr (std::is_same_v<TileIndex, std::tuple_element_t<0, decltype(args)>>) { | |
+ /* Do not even think about executing out-of-bounds tile-commands. */ | |
+ TileIndex tile = std::get<0>(args); | |
+ if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (GetCommandFlags<Tcmd>() & CMD_ALL_TILES) == 0))) return false; | |
+ } | |
+ | |
return InternalPost(err_message, callback, my_cmd, true, location, std::move(args)); | |
} | |
@@ -299,6 +305,9 @@ struct CommandHelper<Tcmd, Tret(*)(DoCommandFlag, Targs...), true> : protected C | |
template <typename Tcallback> | |
static bool InternalPost(StringID err_message, Tcallback *callback, bool my_cmd, bool network_command, TileIndex tile, std::tuple<Targs...> args) | |
{ | |
+ /* Do not even think about executing out-of-bounds tile-commands. */ | |
+ if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (GetCommandFlags<Tcmd>() & CMD_ALL_TILES) == 0))) return false; | |
+ | |
auto [err, estimate_only, only_sending] = InternalPostBefore(Tcmd, GetCommandFlags<Tcmd>(), tile, err_message, network_command); | |
if (err) return false; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment