aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-10-08 16:45:20 +0200
committerTreeston <treeston.mmoc@gmail.com>2020-10-08 17:01:42 +0200
commit3ec98bf2410bb8fa73fe6b386a6e766bef575e97 (patch)
tree4bbc9a9a17419bb30059da77a70f6157b6243210
parent5f001ddb2ba7974696f34c8da32ae901faf81bf9 (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.sql6
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommand.cpp7
-rw-r--r--src/server/game/Miscellaneous/Language.h3
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,