From c725ee84bbdc39f13d684b81938eacb5aca05cc0 Mon Sep 17 00:00:00 2001 From: KimLS Date: Fri, 3 Jan 2014 23:41:11 -0800 Subject: [PATCH] Fix for a potential buffer overflow on login server under very rare circumstances via Rogean. Fix for perl parser not clearing errors via sorvani --- loginserver/WorldServer.cpp | 7 +++++++ zone/embparser.cpp | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) 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;