From 09bec79b473fad40268f7b25b92c4979563829c4 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 4 Mar 2014 04:14:17 -0500 Subject: Fix 2 crashes from removing the permanent channel mode from channels which do not exist --- modules/commands/cs_mode.cpp | 4 ++-- modules/commands/cs_set.cpp | 6 ------ modules/pseudoclients/chanserv.cpp | 5 ++++- 3 files changed, 6 insertions(+), 9 deletions(-) (limited to 'modules') diff --git a/modules/commands/cs_mode.cpp b/modules/commands/cs_mode.cpp index db5eecbb3..a13610d23 100644 --- a/modules/commands/cs_mode.cpp +++ b/modules/commands/cs_mode.cpp @@ -902,9 +902,9 @@ class CSMode : public Module } } - void OnCheckModes(Channel *c) anope_override + void OnCheckModes(Reference &c) anope_override { - if (!c->ci) + if (!c || !c->ci) return; ModeLocks *locks = modelocks.Get(c->ci); diff --git a/modules/commands/cs_set.cpp b/modules/commands/cs_set.cpp index bb8232808..1109c888e 100644 --- a/modules/commands/cs_set.cpp +++ b/modules/commands/cs_set.cpp @@ -1289,12 +1289,6 @@ class CSSet : public Module { if (c->ci) persist.Unset(c->ci); - - if (c->CheckDelete()) - { - delete c; - return EVENT_STOP; - } } if (c->ci && mode->type != MODE_STATUS && !c->syncing && Me->IsSynced()) diff --git a/modules/pseudoclients/chanserv.cpp b/modules/pseudoclients/chanserv.cpp index 388a14649..250296f55 100644 --- a/modules/pseudoclients/chanserv.cpp +++ b/modules/pseudoclients/chanserv.cpp @@ -274,8 +274,11 @@ class ChanServCore : public Module, public ChanServService "lists and settings for any channel.")); } - void OnCheckModes(Channel *c) anope_override + void OnCheckModes(Reference &c) anope_override { + if (!c) + return; + if (c->ci) c->SetMode(c->ci->WhoSends(), "REGISTERED", "", false); else -- cgit