summaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/svsjoin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_spanningtree/svsjoin.cpp')
-rw-r--r--src/modules/m_spanningtree/svsjoin.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/modules/m_spanningtree/svsjoin.cpp b/src/modules/m_spanningtree/svsjoin.cpp
index 38ba687cc..f21a6d23e 100644
--- a/src/modules/m_spanningtree/svsjoin.cpp
+++ b/src/modules/m_spanningtree/svsjoin.cpp
@@ -28,18 +28,23 @@
bool TreeSocket::ServiceJoin(const std::string &prefix, std::deque<std::string> &params)
{
+ // Check params
if (params.size() < 2)
return true;
+ // Check for valid channel name
+ if (!ServerInstance->IsChannel(params[1].c_str(), ServerInstance->Config->Limits.ChanMax))
+ return true;
+
+ // Check target exists
User* u = this->ServerInstance->FindNick(params[0]);
+ if (!u)
+ return true;
- if (u)
- {
- /* only join if it's local, otherwise just pass it on! */
- if (IS_LOCAL(u))
- Channel::JoinUser(this->ServerInstance, u, params[1].c_str(), false, "", false, ServerInstance->Time());
- Utils->DoOneToAllButSender(prefix,"SVSJOIN",params,prefix);
- }
+ /* only join if it's local, otherwise just pass it on! */
+ if (IS_LOCAL(u))
+ Channel::JoinUser(this->ServerInstance, u, params[1].c_str(), false, "", false, ServerInstance->Time());
+ Utils->DoOneToAllButSender(prefix,"SVSJOIN",params,prefix);
return true;
}