diff options
author | Adam <Adam@anope.org> | 2014-05-13 22:57:53 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2014-05-13 22:57:53 -0400 |
commit | 63b02b8c97e73d5a1fc7005e9693a954179ded0d (patch) | |
tree | 84d67d16b8f984eef67653c7a50f7154aa33bb23 /src/channels.cpp | |
parent | 1c8a77ab9f4adfd0afd8217bc462bb338925dcea (diff) |
Sanitize nuh masks more to prevent the other side from rewriting them, which screws with our internal tracking of them
Diffstat (limited to 'src/channels.cpp')
-rw-r--r-- | src/channels.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/channels.cpp b/src/channels.cpp index b705c8584..409cf6b55 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -400,6 +400,7 @@ void Channel::RemoveModeInternal(MessageSource &setter, ChannelMode *ocm, const void Channel::SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string ¶m, bool enforce_mlock) { + Anope::string wparam = param; if (!cm) return; /* Don't set modes already set */ @@ -408,11 +409,11 @@ void Channel::SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string ¶m, else if (cm->type == MODE_PARAM) { ChannelModeParam *cmp = anope_dynamic_static_cast<ChannelModeParam *>(cm); - if (!cmp->IsValid(param)) + if (!cmp->IsValid(wparam)) return; Anope::string cparam; - if (GetParam(cm->name, cparam) && cparam.equals_cs(param)) + if (GetParam(cm->name, cparam) && cparam.equals_cs(wparam)) return; } else if (cm->type == MODE_STATUS) @@ -424,7 +425,11 @@ void Channel::SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string ¶m, else if (cm->type == MODE_LIST) { ChannelModeList *cml = anope_dynamic_static_cast<ChannelModeList *>(cm); - if (this->HasMode(cm->name, param) || !cml->IsValid(param)) + + if (!cml->IsValid(wparam)) + return; + + if (this->HasMode(cm->name, wparam)) return; } @@ -439,7 +444,6 @@ void Channel::SetMode(BotInfo *bi, ChannelMode *cm, const Anope::string ¶m, this->chanserv_modecount++; } - Anope::string wparam = param; ChannelMode *wcm = cm->Wrap(wparam); ModeManager::StackerAdd(bi, this, wcm, true, wparam); |