From 08ca6639b6d33d515b9bec4861a23252576f1328 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 23 Nov 2008 11:33:07 +0300 Subject: [PATCH] [6842] More correct guid/name arg processing in .pdump write command, reject early wrong player name in HandleWhoisOpcode. --- src/game/Level3.cpp | 18 ++++++++++++++++-- src/game/MiscHandler.cpp | 4 +--- src/shared/Util.h | 12 +++++++++++- src/shared/revision_nr.h | 2 +- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 125a6609d..2dcd52b9f 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -5590,9 +5590,23 @@ bool ChatHandler::HandleWritePDumpCommand(const char *args) if(!file || !p2) return false; - uint32 guid = objmgr.GetPlayerGUIDByName(p2); - if(!guid) + uint32 guid; + // character name can't start from number + if (isNumeric(p2[0]) guid = atoi(p2); + else + { + std::string name = p2; + + if (!normalizePlayerName (name)) + { + SendSysMessage (LANG_PLAYER_NOT_FOUND); + SetSentErrorMessage (true); + return false; + } + + guid = objmgr.GetPlayerGUIDByName(name); + } if(!objmgr.GetPlayerAccountIdByGUID(guid)) { diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 5c4096493..97ad299bf 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1255,14 +1255,12 @@ void WorldSession::HandleWhoisOpcode(WorldPacket& recv_data) return; } - if(charname.empty()) + if(charname.empty() || !normalizePlayerName (charname)) { SendNotification(LANG_NEED_CHARACTER_NAME); return; } - normalizePlayerName (charname); - Player *plr = objmgr.GetPlayer(charname.c_str()); if(!plr) diff --git a/src/shared/Util.h b/src/shared/Util.h index 6577a7d9f..0b93cc985 100644 --- a/src/shared/Util.h +++ b/src/shared/Util.h @@ -170,9 +170,19 @@ inline bool isEastAsianCharacter(wchar_t wchar) return false; } +inline bool isNumeric(wchar_t wchar) +{ + return (wchar >= L'0' && wchar <=L'9'); +} + +inline bool isNumeric(char c) +{ + return (c >= '0' && c <='9'); +} + inline bool isNumericOrSpace(wchar_t wchar) { - return (wchar >= L'0' && wchar <=L'9') || wchar == L' '; + return isNumeric(wchar) || wchar == L' '; } inline bool isBasicLatinString(std::wstring wstr, bool numericOrSpace) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2dd1470a8..2f747976f 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "6841" + #define REVISION_NR "6842" #endif // __REVISION_NR_H__ -- 2.11.4.GIT