summaryrefslogtreecommitdiff
path: root/src/mode.cpp
diff options
context:
space:
mode:
authorGravatar brain2007-01-14 18:33:02 +0000
committerGravatar brain2007-01-14 18:33:02 +0000
commitfb044a78b11216565ac80ebf148a6e5fa4badd3c (patch)
treee647352ea2c45bb06607421126f38685221ce4f3 /src/mode.cpp
parentFix BeforeMode to have the parameter available, if there are enough parameter... (diff)
Fix this so that if the beforemode clears the parameter, and it was supposed to have one, we abort
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6327 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/mode.cpp')
-rw-r--r--src/mode.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/mode.cpp b/src/mode.cpp
index 695f043da..1ae8dce07 100644
--- a/src/mode.cpp
+++ b/src/mode.cpp
@@ -455,6 +455,7 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
continue;
}
+ bool had_parameter = !parameter.empty();
for (ModeWatchIter watchers = modewatchers[handler_id].begin(); watchers != modewatchers[handler_id].end(); watchers++)
{
if ((*watchers)->BeforeMode(user, targetuser, targetchannel, parameter, adding, type) == MODEACTION_DENY)
@@ -462,6 +463,12 @@ void ModeParser::Process(const char** parameters, int pcnt, userrec *user, bool
abort = true;
break;
}
+ /* A module whacked the parameter completely, and there was one. abort. */
+ if ((had_parameter) && (parameter.empty()))
+ {
+ abort = true;
+ break;
+ }
}
if (abort)