diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp | 15 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSession.cpp | 9 | ||||
-rwxr-xr-x | src/server/game/Server/WorldSession.h | 1 |
3 files changed, 24 insertions, 1 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp index 1dd18d9c2f1..9e25f686c3f 100755 --- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp @@ -445,7 +445,8 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte Field *fields = result->Fetch(); // SELECT SUM(x) is MYSQL_TYPE_NEWDECIMAL - needs to be read as string const char* ch = fields[0].GetCString(); - acctCharCount = atoi(ch); + if (ch) + acctCharCount = atoi(ch); } if (acctCharCount >= sWorld->getIntConfig(CONFIG_CHARACTERS_PER_ACCOUNT)) @@ -454,6 +455,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_ACCOUNT_LIMIT); SendPacket(&data); delete createInfo; + _charCreateCallback.SetParam(NULL); _charCreateCallback.FreeResult(); return; } @@ -483,6 +485,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_SERVER_LIMIT); SendPacket(&data); delete createInfo; + _charCreateCallback.SetParam(NULL); _charCreateCallback.FreeResult(); return; } @@ -500,6 +503,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_LEVEL_REQUIREMENT); SendPacket(&data); delete createInfo; + _charCreateCallback.SetParam(NULL); _charCreateCallback.FreeResult(); return; } @@ -550,6 +554,8 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT); SendPacket(&data); delete createInfo; + _charCreateCallback.SetParam(NULL); + _charCreateCallback.FreeResult(); return; } } @@ -576,6 +582,8 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_PVP_TEAMS_VIOLATION); SendPacket(&data); delete createInfo; + _charCreateCallback.SetParam(NULL); + _charCreateCallback.FreeResult(); return; } } @@ -607,6 +615,8 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT); SendPacket(&data); delete createInfo; + _charCreateCallback.SetParam(NULL); + _charCreateCallback.FreeResult(); return; } } @@ -639,6 +649,8 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_ERROR); SendPacket(&data); delete createInfo; + _charCreateCallback.SetParam(NULL); + _charCreateCallback.FreeResult(); return; } @@ -679,6 +691,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte delete pNewChar; // created only to call SaveToDB() delete createInfo; + _charCreateCallback.SetParam(NULL); _charCreateCallback.FreeResult(); } break; diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index f689e0c3266..e9f5573c723 100755 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -102,6 +102,8 @@ m_latency(0), m_TutorialsChanged(false), recruiterId(recruiter) ResetTimeOutTime(); LoginDatabase.PExecute("UPDATE account SET online = 1 WHERE id = %u;", GetAccountId()); } + + InitializeQueryCallbackParameters(); } /// WorldSession destructor @@ -940,6 +942,13 @@ void WorldSession::SetPlayer(Player *plr) m_GUIDLow = _player->GetGUIDLow(); } +void WorldSession::InitializeQueryCallbackParameters() +{ + // Callback parameters that have pointers in them should be properly + // initialized to NULL here. + _charCreateCallback.SetParam(NULL); +} + void WorldSession::ProcessQueryCallbacks() { QueryResult result; diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 7e443d299c2..aa7793a69ff 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -893,6 +893,7 @@ class WorldSession void HandleUpdateProjectilePosition(WorldPacket& recvPacket); private: + void InitializeQueryCallbackParameters(); void ProcessQueryCallbacks(); ACE_Future_Set<QueryResult> _nameQueryCallbacks; |