[smuxi: 2/3] Engine-IRC: tolerate duplicate nicks in RPL_NAMREPLY (closes: #1051)
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi: 2/3] Engine-IRC: tolerate duplicate nicks in RPL_NAMREPLY (closes: #1051)
- Date: Sun, 3 May 2015 21:08:40 +0000 (UTC)
commit 83a609d02d2b5e961f146e72978b521c5d58be23
Author: Mirco Bauer <meebey meebey net>
Date: Sun May 3 22:58:33 2015 +0200
Engine-IRC: tolerate duplicate nicks in RPL_NAMREPLY (closes: #1051)
irc.gitter.im sent duplicate nicks in RPL_NAMREPLY for some reason and triggered
an exception in Smuxi's IRC engine:
2015-05-03 22:17:11,149 [IrcProtocolManager (irc.gitter.im:6697) listener] ERROR
Smuxi.Engine.IrcProtocolManager - _Run(): exception in _Listen() occurred!
System.ArgumentException: An element with the same key already exists in the dictionary.
at System.Collections.Generic.Dictionary`2[System.String,Smuxi.Engine.PersonModel].Add
(System.String key, Smuxi.Engine.PersonModel value) [0x00171] in
/tmp/buildd/mono-2.6.7/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:429
at Smuxi.Engine.IrcProtocolManager._OnNames (System.Object sender,
Meebey.SmartIrc4net.NamesEventArgs e) [0x00000] in <filename unknown>:0
at Meebey.SmartIrc4net.IrcClient._Event_RPL_NAMREPLY (Meebey.SmartIrc4net.IrcMessageData ircdata)
[0x00408] in /usr/local/src/smuxi-cloud/lib/SmartIrc4net/src/IrcClient/IrcClient.cs:2816
at Meebey.SmartIrc4net.IrcClient._HandleEvents (Meebey.SmartIrc4net.IrcMessageData ircdata)
[0x00349] in /usr/local/src/smuxi-cloud/lib/SmartIrc4net/src/IrcClient/IrcClient.cs:1511
at Meebey.SmartIrc4net.IrcClient._Worker (System.Object sender,
Meebey.SmartIrc4net.ReadLineEventArgs e) [0x00000] in
/usr/local/src/smuxi-cloud/lib/SmartIrc4net/src/IrcClient/IrcClient.cs:1169
at (wrapper delegate-invoke)
Meebey.SmartIrc4net.ReadLineEventHandler:invoke_void__this___object_ReadLineEventArgs
(object,Meebey.SmartIrc4net.ReadLineEventArgs)
at (wrapper delegate-invoke)
Meebey.SmartIrc4net.ReadLineEventHandler:invoke_void__this___object_ReadLineEventArgs
(object,Meebey.SmartIrc4net.ReadLineEventArgs)
at Meebey.SmartIrc4net.IrcConnection.ReadLine (Boolean blocking) [0x000bb] in
/usr/local/src/smuxi-cloud/lib/SmartIrc4net/src/IrcConnection/IrcConnection.cs:902
at Meebey.SmartIrc4net.IrcConnection.Listen (Boolean blocking) [0x0000b] in
/usr/local/src/smuxi-cloud/lib/SmartIrc4net/src/IrcConnection/IrcConnection.cs:841
at Meebey.SmartIrc4net.IrcConnection.Listen () [0x00000] in
/usr/local/src/smuxi-cloud/lib/SmartIrc4net/src/IrcConnection/IrcConnection.cs:855
at Smuxi.Engine.IrcProtocolManager._Listen () [0x00000] in <filename unknown>:0
src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
index d950dd8..42c83a7 100644
--- a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
+++ b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
@@ -3246,8 +3246,11 @@ namespace Smuxi.Engine
groupPerson.IsVoice = true;
break;
}
-
- groupChat.UnsafePersons.Add(groupPerson.NickName, groupPerson);
+
+ // HACK: replace existing value in case we get duplicate nicks
+ // on broken IRC servers like irc.gitter.im, see:
+ // https://smuxi.im/issues/show/1051
+ groupChat.UnsafePersons[groupPerson.NickName] = groupPerson;
#if LOG4NET
// logging noise
//_Logger.Debug("_OnNames() added user: " + username + " to: " + groupChat.Name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]