From a89fa73b72c2cb1ffd771b752f7a4b8b52f6fbc8 Mon Sep 17 00:00:00 2001 From: MellianStudios Date: Sun, 21 Jan 2024 00:04:46 +0100 Subject: [PATCH] fix(Scripts/Command): prevent crash on set motd (#18203) * prevent crash on set motd * updated version * another version * Update cs_server.cpp --------- Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com> --- .../rev_1705791671858497500.sql | 2 ++ src/server/scripts/Commands/cs_server.cpp | 18 +++++------------- 2 files changed, 7 insertions(+), 13 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1705791671858497500.sql diff --git a/data/sql/updates/pending_db_world/rev_1705791671858497500.sql b/data/sql/updates/pending_db_world/rev_1705791671858497500.sql new file mode 100644 index 000000000..cf32a477d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1705791671858497500.sql @@ -0,0 +1,2 @@ +-- +UPDATE `command` SET `help`='Syntax: .server set motd Optional($realmId) $MOTD\r\n\r\nSet server Message of the day for the specified $realmId.\r\nIf $realmId is not provided it will update for the current realm.' WHERE `name`='server set motd'; diff --git a/src/server/scripts/Commands/cs_server.cpp b/src/server/scripts/Commands/cs_server.cpp index 6dc033cfa..25adccc20 100644 --- a/src/server/scripts/Commands/cs_server.cpp +++ b/src/server/scripts/Commands/cs_server.cpp @@ -514,40 +514,32 @@ public: } // Define the 'Message of the day' for the realm - static bool HandleServerSetMotdCommand(ChatHandler* handler, std::string realmId, Tail motd) + static bool HandleServerSetMotdCommand(ChatHandler* handler, Optional realmId, Tail motd) { std::wstring wMotd = std::wstring(); std::string strMotd = std::string(); - if (realmId.empty()) - { - return false; - } + if (!realmId) + realmId = static_cast(realm.Id.Realm); if (motd.empty()) - { return false; - } if (!Utf8toWStr(motd, wMotd)) - { return false; - } if (!WStrToUtf8(wMotd, strMotd)) - { return false; - } LoginDatabaseTransaction trans = LoginDatabase.BeginTransaction(); LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_MOTD); - stmt->SetData(0, Acore::StringTo(realmId).value()); + stmt->SetData(0, realmId.value()); stmt->SetData(1, strMotd); trans->Append(stmt); LoginDatabase.CommitTransaction(trans); sMotdMgr->LoadMotd(); - handler->PSendSysMessage(LANG_MOTD_NEW, Acore::StringTo(realmId).value(), strMotd); + handler->PSendSysMessage(LANG_MOTD_NEW, realmId.value(), strMotd); return true; }