From d7ec5438a5028f0401e576bc859e9b5b10a3acb4 Mon Sep 17 00:00:00 2001 From: Rochet2 Date: Wed, 12 Apr 2017 21:36:24 +0300 Subject: [PATCH] Remove bad string splitting Thanks to Makpptfox at getmangos.eu for report --- PlayerHooks.cpp | 23 ++++++----------------- ServerHooks.cpp | 18 +++++++++++++++--- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/PlayerHooks.cpp b/PlayerHooks.cpp index 4205272..9b52af0 100644 --- a/PlayerHooks.cpp +++ b/PlayerHooks.cpp @@ -42,31 +42,20 @@ void Eluna::OnLearnTalents(Player* pPlayer, uint32 talentId, uint32 talentRank, bool Eluna::OnCommand(Player* player, const char* text) { // If from console, player is NULL - std::string fullcmd(text); if (!player || player->GetSession()->GetSecurity() >= SEC_ADMINISTRATOR) { - char* creload = strtok((char*)text, " "); - char* celuna = strtok(NULL, ""); - if (creload && celuna) + std::string reload = text; + std::transform(reload.begin(), reload.end(), reload.begin(), ::tolower); + if (reload.find("reload eluna") == 0) { - std::string reload(creload); - std::string eluna(celuna); - std::transform(reload.begin(), reload.end(), reload.begin(), ::tolower); - if (reload == "reload") - { - std::transform(eluna.begin(), eluna.end(), eluna.begin(), ::tolower); - if (std::string("eluna").find(eluna) == 0) - { - ReloadEluna(); - return false; - } - } + ReloadEluna(); + return false; } } START_HOOK_WITH_RETVAL(PLAYER_EVENT_ON_COMMAND, true); Push(player); - Push(fullcmd); + Push(text); return CallAllFunctionsBool(PlayerEventBindings, key, true); } diff --git a/ServerHooks.cpp b/ServerHooks.cpp index 01294f1..65a2c27 100644 --- a/ServerHooks.cpp +++ b/ServerHooks.cpp @@ -35,9 +35,21 @@ bool Eluna::OnAddonMessage(Player* sender, uint32 type, std::string& msg, Player START_HOOK_WITH_RETVAL(ADDON_EVENT_ON_MESSAGE, true); Push(sender); Push(type); - const char* c_msg = msg.c_str(); - Push(strtok((char*)c_msg, "\t")); // prefix - Push(strtok(NULL, "")); // msg + + auto delimeter_position = msg.find('\t'); + if (delimeter_position == std::string::npos) + { + Push(msg); // prefix + Push(); // msg + } + else + { + std::string prefix = msg.substr(0, delimeter_position); + std::string content = msg.substr(delimeter_position + 1, std::string::npos); + Push(prefix); + Push(content); + } + if (receiver) Push(receiver); else if (guild)