Modify

#1246 new defect

Unnecessary 403 "No such channel" error after /part-ing channels manually

Reported by: dx Owned by:
Priority: normal Milestone:
Component: IRC Version: Unspecified
Keywords: Cc:
IRC client+version: Client-independent Operating System: Linux
OS version/distro:

Description

Hello future-dx, take care of this.

To reproduce:

  1. Join groupchat
  2. Leave groupchat from irc client.
  3. See status window or rawlog.

What happens:

  1. /part removes the user from the channel first
  2. imcb_chat_remove_buddy (from the jabber presence response) tries to remove it again and fails silently
  3. imcb_chat_free (also from the presence response), tries again with IRC_CDU_KICK, message "Chatroom closed by server", which is interpreted as a channel join error
Breakpoint 3, irc_channel_del_user (ic=0x558d1dc195a0, iu=0x558d1d787340, type=IRC_CDU_PART, msg=0x0) at irc_channel.c:263
263             if (!(icu = irc_channel_has_user(ic, iu))) {
(rr) bt
#0  irc_channel_del_user (ic=0x558d1dc195a0, iu=0x558d1d787340, type=IRC_CDU_PART, msg=0x0) at irc_channel.c:263
#1  0x0000558d1aec848d in irc_cmd_part (irc=0x558d1d7442a0, cmd=0x558d1d744710) at irc_commands.c:332
#2  0x0000558d1aec4782 in irc_exec (irc=0x558d1d7442a0, cmd=0x558d1d744710) at irc_commands.c:878
#3  0x0000558d1ae8ed9d in irc_process (irc=0x558d1d7442a0) at irc.c:398
#4  0x0000558d1ae67d2f in bitlbee_io_current_client_read (data=0x558d1d7442a0, fd=10, cond=B_EV_IO_READ) at bitlbee.c:213
#5  0x0000558d1af2690c in gaim_io_invoke (source=0x558d1d746d40, condition=G_IO_IN, data=0x558d1d730fe0) at events_glib.c:86
#6  0x00007f76f382ae8f in g_main_dispatch (context=0x558d1d7405f0) at gmain.c:3154
#7  0x00007f76f382bdc6 in g_main_context_dispatch (context=0x558d1d7405f0) at gmain.c:3769
#8  0x00007f76f382bfca in g_main_context_iterate (context=0x558d1d7405f0, block=1, dispatch=1, self=0x558d1d744e00) at gmain.c:3840
#9  0x00007f76f382c46a in g_main_loop_run (loop=0x558d1d71b7a0) at gmain.c:4034
#10 0x0000558d1af26430 in b_main_run () at events_glib.c:59
#11 0x0000558d1af1747f in main (argc=2, argv=0x7fff6bc750d8) at unix.c:172
(rr) c
Continuing.

Breakpoint 3, irc_channel_del_user (ic=0x558d1dc195a0, iu=0x558d1d787340, type=IRC_CDU_PART, msg=0x0) at irc_channel.c:263
263             if (!(icu = irc_channel_has_user(ic, iu))) {
(rr) bt
#0  irc_channel_del_user (ic=0x558d1dc195a0, iu=0x558d1d787340, type=IRC_CDU_PART, msg=0x0) at irc_channel.c:263
#1  0x0000558d1aea64de in bee_irc_chat_remove_user (bee=0x558d1d743f10, c=0x558d1dc21610, bu=0x558d1d730120, reason=0x0) at irc_im.c:702
#2  0x0000558d1af7f846 in imcb_chat_remove_buddy (c=0x558d1dc21610, handle=0x558d1dc229b0 "test1@localhost", reason=0x0) at bee_chat.c:231
#3  0x0000558d1afc5fc4 in jabber_chat_pkt_presence (ic=0x558d1d7873d0, bud=0x558d1dc20db0, node=0x558d1d7444e0) at conference.c:394
#4  0x0000558d1aff6992 in jabber_pkt_presence (node=0x558d1d7444e0, data=0x558d1d7873d0) at presence.c:110
#5  0x0000558d1af68215 in xt_handle (xt=0x558d1d7859d0, node=0x558d1d7444e0, depth=0) at xmltree.c:195
#6  0x0000558d1af66fc1 in xt_handle (xt=0x558d1d7859d0, node=0x558d1dc14500, depth=1) at xmltree.c:174
#7  0x0000558d1af66e7a in xt_handle (xt=0x558d1d7859d0, node=0x0, depth=1) at xmltree.c:169
#8  0x0000558d1afcf1ea in jabber_feed_input (ic=0x558d1d7873d0,
    buf=0x7fff6bc747e0 "<presence type='unavailable' to='test1@localhost/BitlBee' from='#muc1@muc.localhost/test1@localhost/d360b57a-d8c9-4c5e-9e9f-dd110170cabf'><x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='none' role='none'/><status code='110'/></x></presence>\307k\377\177", size=258) at io.c:167
#9  0x0000558d1afcaf1f in jabber_read_callback (data=0x558d1d7873d0, fd=11, cond=B_EV_IO_READ) at io.c:237
#10 0x0000558d1af2690c in gaim_io_invoke (source=0x558d1dc15f40, condition=G_IO_IN, data=0x558d1d72d9d0) at events_glib.c:86
#11 0x00007f76f382ae8f in g_main_dispatch (context=0x558d1d7405f0) at gmain.c:3154
#12 0x00007f76f382bdc6 in g_main_context_dispatch (context=0x558d1d7405f0) at gmain.c:3769
#13 0x00007f76f382bfca in g_main_context_iterate (context=0x558d1d7405f0, block=1, dispatch=1, self=0x558d1d744e00) at gmain.c:3840
#14 0x00007f76f382c46a in g_main_loop_run (loop=0x558d1d71b7a0) at gmain.c:4034
#15 0x0000558d1af26430 in b_main_run () at events_glib.c:59
#16 0x0000558d1af1747f in main (argc=2, argv=0x7fff6bc750d8) at unix.c:172
(rr) c
Continuing.

Breakpoint 3, irc_channel_del_user (ic=0x558d1dc195a0, iu=0x558d1d787340, type=IRC_CDU_KICK, msg=0x558d1b14b699 "Chatroom closed by server") at irc_channel.c:263
263             if (!(icu = irc_channel_has_user(ic, iu))) {
(rr) bt
#0  irc_channel_del_user (ic=0x558d1dc195a0, iu=0x558d1d787340, type=IRC_CDU_KICK, msg=0x558d1b14b699 "Chatroom closed by server") at irc_channel.c:263
#1  0x0000558d1aea56bd in bee_irc_chat_free (bee=0x558d1d743f10, c=0x558d1dc21610) at irc_im.c:635
#2  0x0000558d1af7c0f5 in imcb_chat_free (c=0x558d1dc21610) at bee_chat.c:72
#3  0x0000558d1afc28ae in jabber_chat_free (c=0x558d1dc21610) at conference.c:169
#4  0x0000558d1afc6384 in jabber_chat_pkt_presence (ic=0x558d1d7873d0, bud=0x558d1dc20db0, node=0x558d1d7444e0) at conference.c:406
#5  0x0000558d1aff6992 in jabber_pkt_presence (node=0x558d1d7444e0, data=0x558d1d7873d0) at presence.c:110
#6  0x0000558d1af68215 in xt_handle (xt=0x558d1d7859d0, node=0x558d1d7444e0, depth=0) at xmltree.c:195
#7  0x0000558d1af66fc1 in xt_handle (xt=0x558d1d7859d0, node=0x558d1dc14500, depth=1) at xmltree.c:174
#8  0x0000558d1af66e7a in xt_handle (xt=0x558d1d7859d0, node=0x0, depth=1) at xmltree.c:169
#9  0x0000558d1afcf1ea in jabber_feed_input (ic=0x558d1d7873d0,
    buf=0x7fff6bc747e0 "<presence type='unavailable' to='test1@localhost/BitlBee' from='#muc1@muc.localhost/test1@localhost/d360b57a-d8c9-4c5e-9e9f-dd110170cabf'><x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='none' role='none'/><status code='110'/></x></presence>\307k\377\177", size=258) at io.c:167
#10 0x0000558d1afcaf1f in jabber_read_callback (data=0x558d1d7873d0, fd=11, cond=B_EV_IO_READ) at io.c:237
#11 0x0000558d1af2690c in gaim_io_invoke (source=0x558d1dc15f40, condition=G_IO_IN, data=0x558d1d72d9d0) at events_glib.c:86
#12 0x00007f76f382ae8f in g_main_dispatch (context=0x558d1d7405f0) at gmain.c:3154
#13 0x00007f76f382bdc6 in g_main_context_dispatch (context=0x558d1d7405f0) at gmain.c:3769
#14 0x00007f76f382bfca in g_main_context_iterate (context=0x558d1d7405f0, block=1, dispatch=1, self=0x558d1d744e00) at gmain.c:3840
#15 0x00007f76f382c46a in g_main_loop_run (loop=0x558d1d71b7a0) at gmain.c:4034
#16 0x0000558d1af26430 in b_main_run () at events_glib.c:59
#17 0x0000558d1af1747f in main (argc=2, argv=0x7fff6bc750d8) at unix.c:172

Blame d088ee8bc50cfe13130da745791f533705acd35e

259     int irc_channel_del_user(irc_channel_t *ic, irc_user_t *iu, irc_channel_del_user_type_t type, const char *msg)
260     {
261             irc_channel_user_t *icu;
262
263             if (!(icu = irc_channel_has_user(ic, iu))) {
264                     if (iu == ic->irc->user && type == IRC_CDU_KICK) {
265                             /* an error happened before joining, inform the client with a numeric */
266                             irc_send_num(ic->irc, 403, "%s :Error joining channel (check control channel?)", ic->name);
267                     }
268                     return 0;
269             }

Good luck.

Attachments (0)

Change History (0)

Modify Ticket

Action
as new The ticket will remain with no owner.

Add Comment


E-mail address and name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.