[10340] Some fixes for recent chat code changes.

* Fixed crash at absent optional literal. Thanks to MysteriousSouL for reproting.
* Converted mode commands use new way parsing functions with fixing posible crash cases.
This commit is contained in:
VladimirMangos 2010-08-11 02:10:37 +04:00
parent a202b33702
commit 8b99ac7298
4 changed files with 115 additions and 153 deletions

View file

@ -4459,14 +4459,15 @@ bool ChatHandler::HandleLearnAllRecipesCommand(char* args)
bool ChatHandler::HandleLookupAccountEmailCommand(char* args)
{
if (!*args)
char* emailStr = ExtractQuotedOrLiteralArg(&args);
if (!emailStr)
return false;
std::string email = strtok(args, " ");
char* limit_str = strtok(NULL, " ");
uint32 limit = limit_str ? atoi(limit_str) : 100;
uint32 limit;
if (!ExtractOptUInt32(&args, limit, 100))
return false;
std::string email = emailStr;
LoginDatabase.escape_string(email);
// 0 1 2 3 4
QueryResult *result = LoginDatabase.PQuery("SELECT id, username, last_ip, gmlevel, expansion FROM account WHERE email "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"), email.c_str ());
@ -4476,13 +4477,15 @@ bool ChatHandler::HandleLookupAccountEmailCommand(char* args)
bool ChatHandler::HandleLookupAccountIpCommand(char* args)
{
if (!*args)
char* ipStr = ExtractQuotedOrLiteralArg(&args);
if (!ipStr)
return false;
std::string ip = strtok(args, " ");
char* limit_str = strtok(NULL, " ");
uint32 limit = limit_str ? atoi(limit_str) : 100;
uint32 limit;
if (!ExtractOptUInt32(&args, limit, 100))
return false;
std::string ip = ipStr;
LoginDatabase.escape_string(ip);
// 0 1 2 3 4
@ -4493,13 +4496,15 @@ bool ChatHandler::HandleLookupAccountIpCommand(char* args)
bool ChatHandler::HandleLookupAccountNameCommand(char* args)
{
if (!*args)
char* accountStr = ExtractQuotedOrLiteralArg(&args);
if (!accountStr)
return false;
std::string account = strtok(args, " ");
char* limit_str = strtok(NULL, " ");
uint32 limit = limit_str ? atoi(limit_str) : 100;
uint32 limit;
if (!ExtractOptUInt32(&args, limit, 100))
return false;
std::string account = accountStr;
if (!AccountMgr::normalizeString(account))
return false;
@ -4564,13 +4569,15 @@ bool ChatHandler::ShowAccountListHelper(QueryResult* result, uint32* limit, bool
bool ChatHandler::HandleLookupPlayerIpCommand(char* args)
{
if (!*args)
char* ipStr = ExtractQuotedOrLiteralArg(&args);
if (!ipStr)
return false;
std::string ip = strtok(args, " ");
char* limit_str = strtok(NULL, " ");
uint32 limit = limit_str ? atoi(limit_str) : 100;
uint32 limit;
if (!ExtractOptUInt32(&args, limit, 100))
return false;
std::string ip = ipStr;
LoginDatabase.escape_string(ip);
QueryResult* result = LoginDatabase.PQuery ("SELECT id,username FROM account WHERE last_ip "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"), ip.c_str ());
@ -4580,13 +4587,15 @@ bool ChatHandler::HandleLookupPlayerIpCommand(char* args)
bool ChatHandler::HandleLookupPlayerAccountCommand(char* args)
{
if (!*args)
char* accountStr = ExtractQuotedOrLiteralArg(&args);
if (!accountStr)
return false;
std::string account = strtok(args, " ");
char* limit_str = strtok(NULL, " ");
uint32 limit = limit_str ? atoi(limit_str) : 100;
uint32 limit;
if (!ExtractOptUInt32(&args, limit, 100))
return false;
std::string account = accountStr;
if (!AccountMgr::normalizeString(account))
return false;
@ -4599,13 +4608,15 @@ bool ChatHandler::HandleLookupPlayerAccountCommand(char* args)
bool ChatHandler::HandleLookupPlayerEmailCommand(char* args)
{
if (!*args)
char* emailStr = ExtractQuotedOrLiteralArg(&args);
if (!emailStr)
return false;
std::string email = strtok(args, " ");
char* limit_str = strtok(NULL, " ");
uint32 limit = limit_str ? atoi(limit_str) : 100;
uint32 limit;
if (!ExtractOptUInt32(&args, limit, 100))
return false;
std::string email = emailStr;
LoginDatabase.escape_string(email);
QueryResult* result = LoginDatabase.PQuery("SELECT id,username FROM account WHERE email "_LIKE_" "_CONCAT3_("'%%'","'%s'","'%%'"), email.c_str ());