[Pidgin] #10393: Crash when adding a MSN buddy

Pidgin trac at pidgin.im
Mon Sep 28 12:51:20 EDT 2009


#10393: Crash when adding a MSN buddy
--------------------+-------------------------------------------------------
 Reporter:  romain  |     Owner:  khc  
     Type:  defect  |    Status:  new  
Component:  MSN     |   Version:  2.6.2
 Keywords:          |  
--------------------+-------------------------------------------------------
 On pidgin 2.6.2,

  * I add a new unexistant buddy on my MSN account.
  * Pidgin shows a popup to ask me a “Authorization Request Message”.
  * Without closing it, I go on buddy list, and change the new buddy's
 alias.

 --> *crash*

 Backtrace:

 {{{
 #0  msn_update_contact (session=0xd3a430,
     passport=0xac1440 "anus at fertile.com",
     type=<value optimized out>,
     value=<value optimized out>)
     at /usr/src/debian/work/build-
 area/pidgin-2.6.2/./libpurple/protocols/msn/contact.c:1474
 #1  0x0000000000447ef5 in gtk_blist_renderer_edited_cb (text_rend=<value
 optimized out>,
     arg1=<value optimized out>,
     arg2=0x12b8340 "ui", list=0x7f6300)
     at /usr/src/debian/work/build-
 area/pidgin-2.6.2/./pidgin/gtkblist.c:640
 #2  0x00007ffff54cc10d in IA__g_closure_invoke (
     closure=0xb71c50, return_value=0x0,
     n_param_values=3, param_values=0xb372d0,
     invocation_hint=0x7fffffffb3f0)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gclosure.c:767
 #3  0x00007ffff54df8bb in signal_emit_unlocked_R
     (node=0xb71bf0, detail=0, instance=0x93a9c0,
     emission_return=0x0,
     instance_and_params=0xb372d0)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:3247
 #4  0x00007ffff54e0c62 in IA__g_signal_emit_valist (instance=0x93a9c0,
     signal_id=<value optimized out>, detail=0,
     var_args=0x7fffffffb5d0)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:2980
 #5  0x00007ffff54e1133 in IA__g_signal_emit (
     instance=0x12bb100, signal_id=19640784,
     detail=4128595240)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:3037
 #6  0x00007ffff54cc10d in IA__g_closure_invoke (
     closure=0x12a9bd0, return_value=0x0,
     n_param_values=1, param_values=0xa97820,
     invocation_hint=0x7fffffffb7f0)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gclosure.c:767
 #7  0x00007ffff54df8bb in signal_emit_unlocked_R
     (node=0x124a070, detail=0,
     instance=0xa2a3d0, emission_return=0x0,
     instance_and_params=0xa97820)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:3247
 #8  0x00007ffff54e0c62 in IA__g_signal_emit_valist (instance=0xa2a3d0,
     signal_id=<value optimized out>, detail=0,
     var_args=0x7fffffffba00)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:2980
 #9  0x00007ffff54e0f9a in IA__g_signal_emit_by_name (instance=0xa2a3d0,
     detailed_signal=0x7ffff6d3aeb6 "editing-done") at
 /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:3074
 #10 0x00007ffff6b43159 in ?? ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #11 0x00007ffff54cc10d in IA__g_closure_invoke (
     closure=0xb38390,
     return_value=0x7fffffffbde0,
     n_param_values=1, param_values=0x12b8110,
     invocation_hint=0x7fffffffbc60)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gclosure.c:767
 #12 0x00007ffff54df8bb in signal_emit_unlocked_R
     (node=0x12a22d0, detail=0,
     instance=0xa2a3d0,
     emission_return=0x7fffffffbde0,
     instance_and_params=0x12b8110)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:3247
 #13 0x00007ffff6b023fc in ?? ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #14 0x00007ffff6b028d1 in ?? ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #15 0x00007ffff6b02b4a in ?? ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #16 0x00007ffff6b02ee5 in gtk_bindings_activate
     () from /usr/lib/libgtk-x11-2.0.so.0
 #17 0x000000000044abbf in gtk_blist_window_key_press_cb (w=<value
 optimized out>,
     event=<value optimized out>,
     gtkblist=<value optimized out>)
     at /usr/src/debian/work/build-
 area/pidgin-2.6.2/./pidgin/gtkblist.c:4790
 #18 0x00007ffff6bb7098 in ?? ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #19 0x00007ffff54cc10d in IA__g_closure_invoke (
     closure=0xaa5ae0,
     return_value=0x7fffffffc100,
     n_param_values=2, param_values=0x129d4a0,
     invocation_hint=0x7fffffffc0c0)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gclosure.c:767
 #20 0x00007ffff54df8bb in signal_emit_unlocked_R
     (node=0x7f4880, detail=0, instance=0x8007c0,
     emission_return=0x7fffffffc240,
     instance_and_params=0x129d4a0)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:3247
 #21 0x00007ffff54e0af8 in IA__g_signal_emit_valist (instance=0x8007c0,
     signal_id=<value optimized out>, detail=0,
     var_args=0x7fffffffc2a0)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:2990
 #22 0x00007ffff54e1133 in IA__g_signal_emit (
     instance=0x12bb100, signal_id=19640784,
     detail=4128595240)
     at /tmp/buildd/glib2.0-2.20.5/gobject/gsignal.c:3037
 #23 0x00007ffff6cbca8e in ?? ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #24 0x00007ffff6bafaa2 in gtk_propagate_event ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #25 0x00007ffff6bb0a8b in gtk_main_do_event ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #26 0x00007ffff682d47c in ?? ()
    from /usr/lib/libgdk-x11-2.0.so.0
 #27 0x00007ffff503186a in g_main_dispatch (
     context=0x723600)
     at /tmp/buildd/glib2.0-2.20.5/glib/gmain.c:1824
 #28 IA__g_main_context_dispatch (
     context=0x723600)
     at /tmp/buildd/glib2.0-2.20.5/glib/gmain.c:2377
 #29 0x00007ffff5034eb8 in g_main_context_iterate
     (context=0x723600, block=1, dispatch=1,
     self=<value optimized out>)
     at /tmp/buildd/glib2.0-2.20.5/glib/gmain.c:2455
 #30 0x00007ffff503538d in IA__g_main_loop_run (
     loop=0x11e0380)
     at /tmp/buildd/glib2.0-2.20.5/glib/gmain.c:2663
 #31 0x00007ffff6bb0e87 in gtk_main ()
    from /usr/lib/libgtk-x11-2.0.so.0
 #32 0x0000000000485320 in main (argc=3,
     argv=0x7fffffffe9c8)
     at /usr/src/debian/work/build-area/pidgin-2.6.2/./pidgin/gtkmain.c:916
 }}}

 It happens on this code (in msn_update_contact):

 {{{
 MsnUser *user = msn_userlist_find_user(session->userlist, passport);
 xmlnode *contactId = xmlnode_new_child(contact, "contactId");
 msn_callback_state_set_uid(state, user->uid);
 }}}

 There is no check if user exists, and on the third line it crashes.

 As it happens only if buddy doesn't exist on server, a good solution is to
 return without doing anything.

 On Pidgin, it isn't a big issue, but on the libpurple's minbif client, it
 crashes everytimes an unexistant MSN buddy is added.

-- 
Ticket URL: <http://developer.pidgin.im/ticket/10393>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list