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:
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user