Ticket #10393 (closed defect: fixed)

Opened 11 months ago

Last modified 11 months ago

Crash when adding a MSN buddy

Reported by: romain Owned by: khc
Milestone: 2.6.4 Component: MSN
Version: 2.6.2 Keywords:
Cc:

Description

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@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.

Attachments

libpurple.msn.crash.fix.patch (0.8 kB) - added by romain 11 months ago.
possible fix

Change History

Changed 11 months ago by romain

possible fix

Changed 11 months ago by qulogic@…

  • status changed from new to closed
  • resolution set to fixed
  • milestone set to 2.6.3

(In [e5d6fce6e0c43fe410e8aec7c79150b4a12858a0]):
Don't attempt to change the alias on the server if the contact is not (yet) on it.

Fixes #9242 and #10393.

Changed 11 months ago by MarkDoliner

  • milestone changed from 2.6.3 to 2.6.4

2.6.3 went out as a 2.6.2 plus a few small patches, so most of these tickets are pushed to 2.6.4

Note: See TracTickets for help on using tickets.
All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public. Do not post confidential information, especially passwords!