Fix joins for non-spec servers with extended-join
[quassel.git] / src / core / coresessioneventprocessor.cpp
index ae67021..69d7569 100644 (file)
@@ -300,7 +300,7 @@ void CoreSessionEventProcessor::processIrcEventInvite(IrcEvent *e)
     }
 }
 
-
+/*  JOIN: ":<nick!user@host> JOIN <channel>" */
 void CoreSessionEventProcessor::processIrcEventJoin(IrcEvent *e)
 {
     if (e->testFlag(EventManager::Fake)) // generated by handleEarlyNetsplitJoin
@@ -314,13 +314,20 @@ void CoreSessionEventProcessor::processIrcEventJoin(IrcEvent *e)
     IrcUser *ircuser = net->updateNickFromMask(e->prefix());
 
     if (net->capEnabled(IrcCap::EXTENDED_JOIN)) {
-        if (!checkParamCount(e, 3))
-            return;
-        // If logged in, :nick!user@host JOIN #channelname accountname :Real Name
-        // If logged out, :nick!user@host JOIN #channelname * :Real Name
-        // See:  http://ircv3.net/specs/extensions/extended-join-3.1.html
-        // FIXME Keep track of authed user account, requires adding support to ircuser.h/cpp
-        ircuser->setRealName(e->params()[2]);
+        if (e->params().count() < 3) {
+            // Some IRC servers don't send extended-join events in all situations.  Rather than
+            // ignore the join entirely, treat it as a regular join with a debug-level log entry.
+            // See:  https://github.com/inspircd/inspircd/issues/821
+            qDebug() << "extended-join requires 3 params, got:" << e->params() << ", handling as a "
+                        "regular join";
+        } else {
+            // If logged in, :nick!user@host JOIN #channelname accountname :Real Name
+            // If logged out, :nick!user@host JOIN #channelname * :Real Name
+            // See:  http://ircv3.net/specs/extensions/extended-join-3.1.html
+            // FIXME Keep track of authed user account, requires adding support to ircuser.h/cpp
+            // Update the user's real name, too
+            ircuser->setRealName(e->params()[2]);
+        }
     }
     // Else :nick!user@host JOIN #channelname