From a94bdd00a9f31dcd9e4134987531937ca57975d6 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 30 Oct 2015 17:51:19 +0100 Subject: Core/Corpses: Prevent deleting corpses by ObjectGridUnloader, fixes accessing freed memory in multiple places due to the corpse still being registered in Map containers Closes #15775 Closes #15781 --- src/server/game/Grids/ObjectGridLoader.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/server/game/Grids/ObjectGridLoader.cpp') diff --git a/src/server/game/Grids/ObjectGridLoader.cpp b/src/server/game/Grids/ObjectGridLoader.cpp index efbbf1abf72..2c292c43785 100644 --- a/src/server/game/Grids/ObjectGridLoader.cpp +++ b/src/server/game/Grids/ObjectGridLoader.cpp @@ -152,7 +152,12 @@ void ObjectWorldLoader::Visit(CorpseMapType& /*m*/) for (Corpse* corpse : *corpses) { corpse->AddToWorld(); - i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()).AddWorldObject(corpse); + GridType& cell = i_grid.GetGridType(i_cell.CellX(), i_cell.CellY()); + if (corpse->IsWorldObject()) + cell.AddWorldObject(corpse); + else + cell.AddGridObject(corpse); + ++i_corpses; } } @@ -230,7 +235,7 @@ void ObjectGridCleaner::Visit(GridRefManager &m) template void ObjectGridUnloader::Visit(CreatureMapType &); template void ObjectGridUnloader::Visit(GameObjectMapType &); template void ObjectGridUnloader::Visit(DynamicObjectMapType &); -template void ObjectGridUnloader::Visit(CorpseMapType &); + template void ObjectGridCleaner::Visit(CreatureMapType &); template void ObjectGridCleaner::Visit(GameObjectMapType &); template void ObjectGridCleaner::Visit(DynamicObjectMapType &); -- cgit v1.2.3