diff --git a/loginserver/WorldServer.cpp b/loginserver/WorldServer.cpp index 4d688f416..16b9addec 100644 --- a/loginserver/WorldServer.cpp +++ b/loginserver/WorldServer.cpp @@ -201,6 +201,13 @@ bool WorldServer::Process() } case ServerOP_LSAccountUpdate: { + if(app->size < sizeof(ServerLSAccountUpdate_Struct)) + { + server_log->Log(log_network_error, "Recieved application packet from server that had opcode ServerLSAccountUpdate_Struct, " + "but was too small. Discarded to avoid buffer overrun."); + break; + } + server_log->Log(log_network_trace, "ServerOP_LSAccountUpdate packet received from: %s", short_name.c_str()); ServerLSAccountUpdate_Struct *lsau = (ServerLSAccountUpdate_Struct*)app->pBuffer; if(trusted) diff --git a/zone/embparser.cpp b/zone/embparser.cpp index 3a29e9cc3..3dfea9b5e 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -126,7 +126,6 @@ PerlembParser::~PerlembParser() { } void PerlembParser::ReloadQuests() { - try { if(perl == nullptr) { perl = new Embperl; @@ -145,6 +144,7 @@ void PerlembParser::ReloadQuests() { throw e.what(); } + errors_.clear(); npc_quest_status_.clear(); global_npc_quest_status_ = questUnloaded; player_quest_status_ = questUnloaded;