diff options
author | Treeston <treeston.mmoc@gmail.com> | 2020-10-08 16:45:20 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2020-10-08 17:01:42 +0200 |
commit | 3ec98bf2410bb8fa73fe6b386a6e766bef575e97 (patch) | |
tree | 4bbc9a9a17419bb30059da77a70f6157b6243210 | |
parent | 5f001ddb2ba7974696f34c8da32ae901faf81bf9 (diff) |
Core/ChatCommands: Fix a potential crash if a custom chat command does not have a specified help string
-rw-r--r-- | sql/updates/world/3.3.5/2020_10_08_00_world.sql | 6 | ||||
-rw-r--r-- | src/server/game/Chat/ChatCommands/ChatCommand.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/Language.h | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/sql/updates/world/3.3.5/2020_10_08_00_world.sql b/sql/updates/world/3.3.5/2020_10_08_00_world.sql new file mode 100644 index 00000000000..2208e456128 --- /dev/null +++ b/sql/updates/world/3.3.5/2020_10_08_00_world.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `trinity_string` WHERE `entry`=196; +INSERT INTO `trinity_string` (`entry`,`content_default`) VALUES +(196, 'There is no detailed usage information associated with \'%.*s\'. +This should never occur for stock TrinityCore commands - if it does, report this as a bug. +If this is a custom command, use `trinity_string` to specify it. Look at cs_achievement.cpp for example usage.'); diff --git a/src/server/game/Chat/ChatCommands/ChatCommand.cpp b/src/server/game/Chat/ChatCommands/ChatCommand.cpp index add4d4a0686..f8b01feca33 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommand.cpp +++ b/src/server/game/Chat/ChatCommands/ChatCommand.cpp @@ -173,8 +173,13 @@ void Trinity::Impl::ChatCommands::ChatCommandNode::SendCommandHelp(ChatHandler& { if (std::holds_alternative<TrinityStrings>(_help)) handler.SendSysMessage(std::get<TrinityStrings>(_help)); - else + else if (std::holds_alternative<std::string>(_help)) handler.SendSysMessage(std::get<std::string>(_help)); + else + { + handler.PSendSysMessage(LANG_CMD_HELP_GENERIC, STRING_VIEW_FMT_ARG(_name)); + handler.PSendSysMessage(LANG_CMD_NO_HELP_AVAILABLE, STRING_VIEW_FMT_ARG(_name)); + } } bool header = false; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index ea9bad65960..643699317eb 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -229,7 +229,8 @@ enum TrinityStrings LANG_SUBCMD_INVALID = 193, LANG_CMD_AMBIGUOUS = 194, LANG_CMD_HELP_GENERIC = 195, - // Room for more level 1 196-199 not used + LANG_CMD_NO_HELP_AVAILABLE = 196, + // Room for more level 1 197-199 not used // level 2 chat LANG_NO_SELECTION = 200, |