From d8712ee1eaf57f781a430f6680d5844b4ab0f28b Mon Sep 17 00:00:00 2001 From: David Cernat Date: Tue, 4 Apr 2017 05:03:14 +0300 Subject: [PATCH] [Server] Fix script crashes by reusing BaseEvent in WorldProcessor --- apps/openmw-mp/Networking.cpp | 7 +------ apps/openmw-mp/WorldProcessor.cpp | 14 +++++++------- apps/openmw-mp/WorldProcessor.hpp | 2 +- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/apps/openmw-mp/Networking.cpp b/apps/openmw-mp/Networking.cpp index b3df13130..651ef393c 100644 --- a/apps/openmw-mp/Networking.cpp +++ b/apps/openmw-mp/Networking.cpp @@ -158,12 +158,7 @@ void Networking::processWorldPacket(RakNet::Packet *packet) if (!player->isHandshaked() || player->getLoadState() != Player::POSTLOADED) return; - // Clear our baseEvent before loading new data in it - baseEvent.cell.blank(); - baseEvent.objectChanges.objects.clear(); - baseEvent.guid = packet->guid; - - if (!WorldProcessor::Process(*packet)) + if (!WorldProcessor::Process(*packet, baseEvent)) LOG_MESSAGE_SIMPLE(Log::LOG_WARN, "Unhandled WorldPacket with identifier %i has arrived", packet->data[0]); } diff --git a/apps/openmw-mp/WorldProcessor.cpp b/apps/openmw-mp/WorldProcessor.cpp index a07a920f1..19fc05500 100644 --- a/apps/openmw-mp/WorldProcessor.cpp +++ b/apps/openmw-mp/WorldProcessor.cpp @@ -25,12 +25,12 @@ void WorldProcessor::AddProcessor(mwmp::WorldProcessor *processor) noexcept processors.insert(processors_t::value_type(processor->GetPacketID(), processor)); } -bool WorldProcessor::Process(RakNet::Packet &packet) noexcept +bool WorldProcessor::Process(RakNet::Packet &packet, BaseEvent &event) noexcept { - BaseEvent baseEvent; - baseEvent.cell.blank(); - baseEvent.objectChanges.objects.clear(); - baseEvent.guid = packet.guid; + // Clear our BaseEvent before loading new data in it + event.cell.blank(); + event.objectChanges.objects.clear(); + event.guid = packet.guid; for (auto &processor : processors) { if (processor.first == packet.data[0]) @@ -40,12 +40,12 @@ bool WorldProcessor::Process(RakNet::Packet &packet) noexcept LOG_MESSAGE_SIMPLE(Log::LOG_VERBOSE, "Received %s from %s", processor.second->strPacketID.c_str(), player->npc.mName.c_str()); - myPacket->setEvent(&baseEvent); + myPacket->setEvent(&event); if (!processor.second->avoidReading) myPacket->Read(); - processor.second->Do(*myPacket, *player, baseEvent); + processor.second->Do(*myPacket, *player, event); return true; } } diff --git a/apps/openmw-mp/WorldProcessor.hpp b/apps/openmw-mp/WorldProcessor.hpp index 4d2d15d3b..bc05a20fc 100644 --- a/apps/openmw-mp/WorldProcessor.hpp +++ b/apps/openmw-mp/WorldProcessor.hpp @@ -25,7 +25,7 @@ namespace mwmp virtual void Do(WorldPacket &packet, Player &player, BaseEvent &event); - static bool Process(RakNet::Packet &packet) noexcept; + static bool Process(RakNet::Packet &packet, BaseEvent &event) noexcept; static void AddProcessor(WorldProcessor *processor) noexcept; //typedef boost::unordered_map > processors_t;