aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Chat/ChatCommands/ChatCommandArgs.h24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
index 242b806446d..c9e0723fbf8 100644
--- a/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
+++ b/src/server/game/Chat/ChatCommands/ChatCommandArgs.h
@@ -51,7 +51,13 @@ struct ArgInfo<T, std::enable_if_t<std::is_integral_v<T> && std::is_signed_v<T>>
{
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<T, std::enable_if_t<std::is_integral_v<T> && std::is_unsigned_v<T
{
char const* next = args;
std::string token(args, tokenize(next));
- try { val = std::stoull(token); }
+ try
+ {
+ size_t processedChars = 0;
+ val = std::stoull(token, &processedChars, 0);
+ if (processedChars != token.length())
+ return nullptr;
+ }
catch (...) { return nullptr; }
return next;
}
@@ -79,7 +91,13 @@ struct ArgInfo<T, std::enable_if_t<std::is_floating_point_v<T>>>
{
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;
}