From 4f44cdf2b5e2b4c5e695ea0929a51f692d8b7f2b Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 26 Aug 2013 17:38:02 +0200 Subject: Core/Scripts: Fixed uninitialized variable and memory leaks --- src/server/game/Scripting/ScriptMgr.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'src/server/game/Scripting/ScriptMgr.cpp') diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 0dc96b3dfd9..7c70ed5a737 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -33,6 +33,12 @@ #include "Player.h" #include "WorldPacket.h" +namespace +{ + typedef std::set ExampleScriptContainer; + ExampleScriptContainer ExampleScripts; +} + // This is the global static registry of scripts. template class ScriptRegistry @@ -104,6 +110,9 @@ class ScriptRegistry if (script->GetName().find("example") == std::string::npos && script->GetName().find("Smart") == std::string::npos) TC_LOG_ERROR(LOG_FILTER_SQL, "Script named '%s' does not have a script name assigned in database.", script->GetName().c_str()); + + // These scripts don't get stored anywhere so throw them into this to avoid leaking memory + ExampleScripts.insert(script); } } else @@ -160,7 +169,11 @@ class ScriptRegistry if (!V) \ return R; - +struct TSpellSummary +{ + uint8 Targets; // set of enum SelectTarget + uint8 Effects; // set of enum SelectEffect +} *SpellSummary; ScriptMgr::ScriptMgr() : _scriptCount(0), _scheduledScripts(0) @@ -220,6 +233,13 @@ void ScriptMgr::Unload() SCR_CLEAR(UnitScript); #undef SCR_CLEAR + + for (ExampleScriptContainer::iterator itr = ExampleScripts.begin(); itr != ExampleScripts.end(); ++itr) + delete *itr; + ExampleScripts.clear(); + + delete[] SpellSummary; + delete[] UnitAI::AISpellInfo; } void ScriptMgr::LoadDatabase() @@ -227,14 +247,10 @@ void ScriptMgr::LoadDatabase() sScriptSystemMgr->LoadScriptWaypoints(); } -struct TSpellSummary -{ - uint8 Targets; // set of enum SelectTarget - uint8 Effects; // set of enum SelectEffect -} *SpellSummary; - void ScriptMgr::FillSpellSummary() { + UnitAI::FillAISpellInfo(); + SpellSummary = new TSpellSummary[sSpellMgr->GetSpellInfoStoreSize()]; SpellInfo const* pTempSpell; -- cgit v1.2.3 From cfd1027b8805af3188a62ac803a4861f572469ee Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 26 Aug 2013 18:42:35 +0200 Subject: Build fix --- src/server/game/Scripting/ScriptMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/server/game/Scripting/ScriptMgr.cpp') diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 7c70ed5a737..966b3edfcb9 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -29,7 +29,7 @@ #include "SpellInfo.h" #include "SpellScript.h" #include "GossipDef.h" -#include "CreatureAI.h" +#include "CreatureAIImpl.h" #include "Player.h" #include "WorldPacket.h" -- cgit v1.2.3