summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2011-07-10 09:00:33 +0200
committerSebastien Helleu <flashcode@flashtux.org>2011-07-10 09:00:33 +0200
commitcd5b216e0feb5869118a7fb00d84e3380b10c3fa (patch)
treefe84c276e59bec7adf2c2c29c13fc1b7f802b1d9
parent2b821b8b06513f3c373c061bc2e101a21ff016fa (diff)
downloadweechat-cd5b216e0feb5869118a7fb00d84e3380b10c3fa.zip
relay: fix bug with self nick when someone changes its nick on channel (bug #33739)
-rw-r--r--ChangeLog4
-rw-r--r--src/plugins/relay/relay-client-irc.c18
2 files changed, 13 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 1fa9d44d9..cf164f363 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,7 @@
WeeChat ChangeLog
=================
Sébastien Helleu <flashcode@flashtux.org>
-v0.3.6-dev, 2011-07-05
+v0.3.6-dev, 2011-07-10
Version 0.3.6 (under dev!)
@@ -35,6 +35,8 @@ Version 0.3.6 (under dev!)
* irc: fix memory leak on plugin unload (free ignores)
* irc: fix memory leak in message parser (when called from other plugins like
relay) (bug #33387)
+* relay: fix bug with self nick when someone changes its nick on channel
+ (bug #33739)
* relay: fix memory leak (free some parsed messages) (bug #33387)
* relay: fix memory leak on plugin load (free raw messages)
* logger: add option logger.file.flush_delay (task #11118)
diff --git a/src/plugins/relay/relay-client-irc.c b/src/plugins/relay/relay-client-irc.c
index 3b5799e75..6f898f270 100644
--- a/src/plugins/relay/relay-client-irc.c
+++ b/src/plugins/relay/relay-client-irc.c
@@ -202,7 +202,7 @@ relay_client_irc_signal_irc_in2_cb (void *data, const char *signal,
const char *type_data, void *signal_data)
{
struct t_relay_client *client;
- const char *ptr_msg, *irc_host, *irc_command, *irc_args;
+ const char *ptr_msg, *irc_nick, *irc_host, *irc_command, *irc_args;
struct t_hashtable *hash_parsed;
/* make C compiler happy */
@@ -223,19 +223,21 @@ relay_client_irc_signal_irc_in2_cb (void *data, const char *signal,
hash_parsed = relay_client_irc_parse_message (ptr_msg);
if (hash_parsed)
{
+ irc_nick = weechat_hashtable_get (hash_parsed, "nick");
irc_host = weechat_hashtable_get (hash_parsed, "host");
irc_command = weechat_hashtable_get (hash_parsed, "command");
irc_args = weechat_hashtable_get (hash_parsed, "arguments");
/* if self nick has changed, update it in client data */
- if (irc_command && (weechat_strcasecmp (irc_command, "nick") == 0))
+ if (irc_command && (weechat_strcasecmp (irc_command, "nick") == 0)
+ && irc_nick && irc_nick[0]
+ && irc_args && irc_args[0]
+ && (weechat_strcasecmp (irc_nick, RELAY_IRC_DATA(client, nick)) == 0))
{
- if (irc_args && irc_args[0])
- {
- if (RELAY_IRC_DATA(client, nick))
- free (RELAY_IRC_DATA(client, nick));
- RELAY_IRC_DATA(client, nick) = strdup (irc_args);
- }
+ if (RELAY_IRC_DATA(client, nick))
+ free (RELAY_IRC_DATA(client, nick));
+ RELAY_IRC_DATA(client, nick) = strdup ((irc_args[0] == ':') ?
+ irc_args + 1 : irc_args);
}
/* relay all commands to client, but not ping/pong */