diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2011-07-10 09:00:33 +0200 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2011-07-10 09:00:33 +0200 |
commit | cd5b216e0feb5869118a7fb00d84e3380b10c3fa (patch) | |
tree | fe84c276e59bec7adf2c2c29c13fc1b7f802b1d9 | |
parent | 2b821b8b06513f3c373c061bc2e101a21ff016fa (diff) | |
download | weechat-cd5b216e0feb5869118a7fb00d84e3380b10c3fa.zip |
relay: fix bug with self nick when someone changes its nick on channel (bug #33739)
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/plugins/relay/relay-client-irc.c | 18 |
2 files changed, 13 insertions, 9 deletions
@@ -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 */ |