diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h index 242b806446..c9e0723fbf 100644 --- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h +++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h @@ -51,7 +51,13 @@ struct ArgInfo && std::is_signed_v> { char const* next = args; std::string token(args, tokenize(next)); - try { val = std::stoll(token); } + try + { + size_t processedChars = 0; + val = std::stoll(token, &processedChars, 0); + if (processedChars != token.length()) + return nullptr; + } catch (...) { return nullptr; } return next; } @@ -65,7 +71,13 @@ struct ArgInfo && std::is_unsigned_v>> { char const* next = args; std::string token(args, tokenize(next)); - try { val = std::stold(token); } + try + { + size_t processedChars = 0; + val = std::stold(token, &processedChars); + if (processedChars != token.length()) + return nullptr; + } catch (...) { return nullptr; } return std::isfinite(val) ? next : nullptr; }