summaryrefslogtreecommitdiff
path: root/src/channels.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2013-09-03 19:58:40 -0400
committerAdam <Adam@anope.org>2013-09-03 19:58:40 -0400
commitb005089f2f713271d5db2be681dab49191ed5e4e (patch)
treee803b29fbb5a98144cc8a30ebd08e7f1de6391a8 /src/channels.cpp
parent1b42e266426fd9aee439d024d787c7ba4a421c63 (diff)
Dont allow multiple list modes with the same param on the mode list at once
Diffstat (limited to 'src/channels.cpp')
-rw-r--r--src/channels.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index 8e3a0be0a..91c902206 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -194,7 +194,7 @@ size_t Channel::HasMode(const Anope::string &mname, const Anope::string &param)
return modes.count(mname);
std::pair<Channel::ModeList::iterator, Channel::ModeList::iterator> its = this->GetModeList(mname);
for (; its.first != its.second; ++its.first)
- if (its.first->second == param)
+ if (its.first->second.equals_ci(param))
return 1;
return 0;
}
@@ -279,6 +279,9 @@ void Channel::SetModeInternal(MessageSource &setter, ChannelMode *cm, const Anop
if (cm->type != MODE_LIST)
this->modes.erase(cm->name);
+ else if (this->HasMode(cm->name, param))
+ return;
+
this->modes.insert(std::make_pair(cm->name, param));
if (param.empty() && cm->type != MODE_REGULAR)
@@ -342,11 +345,11 @@ void Channel::RemoveModeInternal(MessageSource &setter, ChannelMode *cm, const A
return;
}
- if (cm->type == MODE_LIST && !param.empty())
+ if (cm->type == MODE_LIST)
{
std::pair<Channel::ModeList::iterator, Channel::ModeList::iterator> its = this->GetModeList(cm->name);
for (; its.first != its.second; ++its.first)
- if (Anope::Match(param, its.first->second))
+ if (param.equals_ci(its.first->second))
{
this->modes.erase(its.first);
break;