From 61838d28cf0d1323edb2ec4acccfb36a5d96fe00 Mon Sep 17 00:00:00 2001 From: brain Date: Mon, 18 Jun 2007 22:49:47 +0000 Subject: This should be safe. Someone test module loading and unloading during use and make sure stuff doesnt fall over. Also test some misconfigured modules, e.g. try and load m_services with m_services_account. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7388 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/inspircd.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 66e8a530b..3e063c26b 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -953,6 +953,7 @@ bool InspIRCd::LoadModule(const char* filename) return false; } } + Module* m = NULL; try { ircd_module* a = new ircd_module(this, modfile); @@ -966,7 +967,7 @@ bool InspIRCd::LoadModule(const char* filename) } if ((long)factory[this->ModCount+1]->factory != -1) { - Module* m = factory[this->ModCount+1]->factory->CreateModule(this); + m = factory[this->ModCount+1]->factory->CreateModule(this); Version v = m->GetVersion(); @@ -1001,6 +1002,7 @@ bool InspIRCd::LoadModule(const char* filename) { this->Log(DEFAULT,"Unable to load %s",modfile); snprintf(MODERR,MAXBUF,"Factory function failed: Probably missing init_module() entrypoint."); + delete a; return false; } } @@ -1008,6 +1010,9 @@ bool InspIRCd::LoadModule(const char* filename) { this->Log(DEFAULT,"Unable to load %s: %s",modfile,modexcept.GetReason()); snprintf(MODERR,MAXBUF,"Factory function of %s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason()); + if (m) + delete m; + delete a; return false; } } -- cgit v1.2.3