1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-28 05:46:38 +02:00

relay: fix bug with self nick when someone changes its nick on channel (bug #33739)

This commit is contained in:
Sebastien Helleu
2011-07-10 09:00:33 +02:00
parent 2b821b8b06
commit cd5b216e0f
2 changed files with 13 additions and 9 deletions
+3 -1
View File
@@ -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)
+10 -8
View File
@@ -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 */