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

Fixed IRC mode parsing when receiving modes with arguments (bug #19902)

This commit is contained in:
Sebastien Helleu
2007-05-20 10:41:51 +00:00
parent 5787acad2c
commit 4061f0641d
4 changed files with 52 additions and 14 deletions
+2 -1
View File
@@ -1,10 +1,11 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2007-05-18
ChangeLog - 2007-05-20
Version 0.2.5 (under dev!):
* fixed IRC mode parsing when receiving modes with arguments (bug #19902)
* fixed crash with IRC JOIN malformed message (bug #19891)
* fixed bug with nick prefixes on some IRC servers (bug #19854)
* improved setup file save: now writes temporary file, then rename it
+24 -6
View File
@@ -117,15 +117,17 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes)
break;
default:
set_flag = irc_mode_channel_get_flag (modes, pos);
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
switch (pos[0])
{
case 'a': /* unrealircd specific flag */
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_CHANADMIN);
break;
case 'h':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_HALFOP);
break;
@@ -135,24 +137,40 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes)
free (channel->key);
channel->key = NULL;
}
if ((set_flag == '+') && ptr_arg)
channel->key = strdup (ptr_arg);
if (set_flag == '+')
{
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
if (ptr_arg)
channel->key = strdup (ptr_arg);
}
break;
case 'l':
if (set_flag == '-')
channel->limit = 0;
if ((set_flag == '+') && ptr_arg)
channel->limit = atoi (ptr_arg);
if (set_flag == '+')
{
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
if (ptr_arg)
channel->limit = atoi (ptr_arg);
}
break;
case 'o':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_OP);
break;
case 'q': /* unrealircd specific flag */
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_CHANOWNER);
break;
case 'v':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_VOICE);
break;
+2 -1
View File
@@ -1,10 +1,11 @@
WeeChat - Wee Enhanced Environment for Chat
===========================================
ChangeLog - 2007-05-18
ChangeLog - 2007-05-20
Version 0.2.5 (under dev!):
* fixed IRC mode parsing when receiving modes with arguments (bug #19902)
* fixed crash with IRC JOIN malformed message (bug #19891)
* fixed bug with nick prefixes on some IRC servers (bug #19854)
* improved setup file save: now writes temporary file, then rename it
+24 -6
View File
@@ -117,15 +117,17 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes)
break;
default:
set_flag = irc_mode_channel_get_flag (modes, pos);
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
switch (pos[0])
{
case 'a': /* unrealircd specific flag */
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_CHANADMIN);
break;
case 'h':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_HALFOP);
break;
@@ -135,24 +137,40 @@ irc_mode_channel_set (t_irc_channel *channel, char *modes)
free (channel->key);
channel->key = NULL;
}
if ((set_flag == '+') && ptr_arg)
channel->key = strdup (ptr_arg);
if (set_flag == '+')
{
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
if (ptr_arg)
channel->key = strdup (ptr_arg);
}
break;
case 'l':
if (set_flag == '-')
channel->limit = 0;
if ((set_flag == '+') && ptr_arg)
channel->limit = atoi (ptr_arg);
if (set_flag == '+')
{
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
if (ptr_arg)
channel->limit = atoi (ptr_arg);
}
break;
case 'o':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_OP);
break;
case 'q': /* unrealircd specific flag */
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_CHANOWNER);
break;
case 'v':
ptr_arg = ((argc > 0) && (current_arg >= 0)) ?
argv[current_arg--] : NULL;
irc_mode_channel_set_nick (channel, ptr_arg,
set_flag, NICK_VOICE);
break;