tieto / sipe

A third-party Pidgin plugin for Microsoft Lync/OCS - clone of upstream http://repo.or.cz/w/siplcs.git
GNU General Public License v2.0
129 stars 24 forks source link

pidgin crashing when pressing emoji button #147

Closed rbeldin closed 7 years ago

rbeldin commented 7 years ago

I have Ubuntu 17.04 and pidgin will core dump if I click on the emoji (smiley face) button in the main chat window. This happens reliably and as far as I know, did not happen until recently:

 dpkg -l | grep collab
rc  libfarstream-0.2-2:amd64                             0.2.7~sipe+collab-0.2991+201512071752~ubuntu15.04.1                 amd64        Audio/Video communications framework: core library
ii  libfarstream-0.2-5:amd64                             0.2.8+sipe+collab-1+201701011925~ubuntu17.04.1                      amd64        Audio/Video communications framework: core library
ii  libpurple-bin                                        1:3.0.0~collab-1+201705260956~ubuntu17.04.1                         all          multi-protocol instant messaging library - extra utilities
ii  libpurple0                                           1:3.0.0~collab-1+201705260956~ubuntu17.04.1                         amd64        multi-protocol instant messaging library
ii  pidgin                                               1:3.0.0~collab-1+201705260956~ubuntu17.04.1                         amd64        graphical multi-protocol instant messaging client
ii  pidgin-data                                          1:3.0.0~collab-1+201705260956~ubuntu17.04.1                         all          multi-protocol instant messaging client - data files

I am not sure that this provides all the libraries. If there are others to collect, please let me know.

Stack trace:

rbeldin@rbeldin-8460p:~$ export CONF=/etc/default/pidgin-sipe
rbeldin@rbeldin-8460p:~$ gdb /usr/bin/pidgin.orig
GNU gdb (Ubuntu 7.12.50.20170314-0ubuntu1) 7.12.50.20170314-git
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/pidgin.orig...(no debugging symbols found)...done.
(gdb) r
Starting program: /usr/bin/pidgin.orig 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffdf517700 (LWP 16083)]
[New Thread 0x7fffded16700 (LWP 16084)]
[New Thread 0x7fffcabc7700 (LWP 16085)]
[New Thread 0x7fffca3c6700 (LWP 16086)]
[New Thread 0x7fffc9357700 (LWP 16087)]
[New Thread 0x7fffc8a54700 (LWP 16088)]

(Pidgin:16077): Gtk-WARNING **: Allocating size to GtkEventBox 0x555556137b40 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?

(Pidgin:16077): Gtk-WARNING **: Allocating size to GtkEventBox 0x555556137b40 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?
[New Thread 0x7fff5d206700 (LWP 16089)]
[New Thread 0x7fff57fff700 (LWP 16091)]
[New Thread 0x7fff577fe700 (LWP 16092)]
[New Thread 0x7fff56ffd700 (LWP 16093)]
[New Thread 0x7fff567fc700 (LWP 16094)]
[New Thread 0x7fff55ffb700 (LWP 16095)]
[New Thread 0x7fff557fa700 (LWP 16096)]
[New Thread 0x7fff54ff9700 (LWP 16097)]

(Pidgin:16077): Gtk-WARNING **: Allocating size to GtkEventBox 0x555556137b40 without calling gtk_widget_get_preferred_width/height(). How does the code know the size to allocate?
[Thread 0x7fff577fe700 (LWP 16092) exited]
[Thread 0x7fff56ffd700 (LWP 16093) exited]

Thread 1 "pidgin.orig" received signal SIGSEGV, Segmentation fault.
0x00007ffff77fb7c0 in g_str_hash () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
(gdb) bt
#0  0x00007ffff77fb7c0 in g_str_hash () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007ffff77fac99 in g_hash_table_lookup () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007ffff1c1e129 in purple_smiley_list_get_unique () at /usr/lib/libpurple.so.20
#3  0x00007ffff7b8ec83 in  () at /usr/lib/libpidgin.so.20
#4  0x00007ffff222ec25 in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#5  0x00007ffff2240c32 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#6  0x00007ffff224988c in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7  0x00007ffff2249c6f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8  0x00007ffff3564860 in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#9  0x00007ffff37eb089 in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#10 0x00007ffff222ec25 in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#11 0x00007ffff2240c32 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#12 0x00007ffff224988c in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#13 0x00007ffff2249c6f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#14 0x00007ffff35e809d in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#15 0x00007ffff35e8105 in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#16 0x00007ffff222ee54 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#17 0x00007ffff224957d in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff2249c6f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff35e6500 in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#20 0x00007fffe83b4e18 in ffi_call_unix64 () at /usr/lib/x86_64-linux-gnu/libffi.so.6
#21 0x00007fffe83b487a in ffi_call () at /usr/lib/x86_64-linux-gnu/libffi.so.6
#22 0x00007ffff222f93a in g_cclosure_marshal_generic_va ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#23 0x00007ffff222ee54 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#24 0x00007ffff224957d in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#25 0x00007ffff2249c6f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#26 0x00007ffff36a1e41 in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#27 0x00007ffff22319d7 in g_cclosure_marshal_VOID__BOXEDv ()
    at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#28 0x00007ffff222ee54 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#29 0x00007ffff224957d in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#30 0x00007ffff2249c6f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#31 0x00007ffff369f10e in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#32 0x00007ffff36a073b in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#33 0x00007ffff36a33bd in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#34 0x00007ffff367093e in gtk_event_controller_handle_event ()
    at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#35 0x00007ffff3835fab in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#36 0x00007ffff36eb021 in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#37 0x00007ffff222ee54 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#38 0x00007ffff2249051 in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#39 0x00007ffff2249c6f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#40 0x00007ffff383824c in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#41 0x00007ffff36e7fae in  () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#42 0x00007ffff36ea06e in gtk_main_do_event () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#43 0x00007ffff31eac75 in  () at /usr/lib/x86_64-linux-gnu/libgdk-3.so.0
#44 0x00007ffff321bd02 in  () at /usr/lib/x86_64-linux-gnu/libgdk-3.so.0
#45 0x00007ffff780c377 in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#46 0x00007ffff780c5e0 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#47 0x00007ffff780c902 in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#48 0x00007ffff36e91d5 in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#49 0x00007ffff7b962dc in pidgin_start () at /usr/lib/libpidgin.so.20
#50 0x00007ffff71fd3f1 in __libc_start_main (main=
    0x555555554890 <main>, argc=1, argv=0x7fffffffe238, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe228) at ../csu/libc-start.c:291
#51 0x000055555555491a in _start ()

(gdb) info thread
  Id   Target Id         Frame
* 1    Thread 0x7ffff7efcfc0 (LWP 16077) "pidgin.orig" 0x00007ffff77fb7c0 in g_str_hash ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
  2    Thread 0x7fffdf517700 (LWP 16083) "gmain" 0x00007ffff72d918d in poll ()
    at ../sysdeps/unix/syscall-template.S:84
  3    Thread 0x7fffded16700 (LWP 16084) "gdbus" 0x00007ffff72d918d in poll ()
    at ../sysdeps/unix/syscall-template.S:84
  4    Thread 0x7fffcabc7700 (LWP 16085) "threaded-ml" 0x00007ffff72d918d in poll ()
    at ../sysdeps/unix/syscall-template.S:84
  5    Thread 0x7fffca3c6700 (LWP 16086) "pidgin.orig" 0x00007ffff72d918d in poll ()
    at ../sysdeps/unix/syscall-template.S:84
  6    Thread 0x7fffc9357700 (LWP 16087) "pidgin.orig" pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
  7    Thread 0x7fffc8a54700 (LWP 16088) "pidgin.orig" pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
  8    Thread 0x7fff5d206700 (LWP 16089) "dconf worker" 0x00007ffff72d918d in poll ()
    at ../sysdeps/unix/syscall-template.S:84
  9    Thread 0x7fff57fff700 (LWP 16091) "pool" syscall ()
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
  12   Thread 0x7fff567fc700 (LWP 16094) "pidgin.orig" pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
  13   Thread 0x7fff55ffb700 (LWP 16095) "pidgin.orig" pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
  14   Thread 0x7fff557fa700 (LWP 16096) "pidgin.orig" pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
  15   Thread 0x7fff54ff9700 (LWP 16097) "pidgin.orig" pthread_cond_wait@@GLIBC_2.3.2 ()
    at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185

I can provide a core if you like.

xhaakon commented 7 years ago

I'm able to reproduce this. It seems that purple_image_get_path() called from smiley_get_uniqid() returns NULL for a PurpleSmiley.

There were some changes concerning PurpleImage and smileys merged to Pidgin default recently. Perhaps @grimmy could comment?

A more detailed backtrace:

(gdb) bt full
#0  0x00007ffff77d4c50 in g_str_hash (v=0x0) at ././glib/ghash.c:1876
        p = 0x0
        h = 5381
#1  0x00007ffff77d4129 in g_hash_table_lookup_node (hash_return=<synthetic pointer>, key=0x0, hash_table=0x7fff4c7a5120) at ././glib/ghash.c:375
        node_hash = <optimized out>
        hash_value = <optimized out>
        have_tombstone = 0
        step = 0
        node_index = <optimized out>
        first_tombstone = 0
        node_hash = <optimized out>
        __func__ = "g_hash_table_lookup"
#2  0x00007ffff77d4129 in g_hash_table_lookup (hash_table=0x7fff4c7a5120, key=0x0) at ././glib/ghash.c:1147
        node_hash = <optimized out>
        __func__ = "g_hash_table_lookup"
#3  0x00007fffefb95206 in purple_smiley_list_get_unique (list=0xc18d70 [PurpleSmileyList]) at /home/haakon/ws/sipe/pidgin/./libpurple/smiley-list.c:355
        smiley = 0x87be80 [PurpleSmiley]
        path = 0x0
        unique = 0x0
        it = 0x8ff3a0
        unique_map = 0x7fff4c7a5120
        priv = 0xc18d40
        __func__ = "purple_smiley_list_get_unique"
#4  0x00007ffff7b9033b in insert_smiley_cb (smiley=0x1666b70 [GtkToggleAction], toolbar=0xea8480 [PidginWebViewToolbar]) at /home/haakon/ws/sipe/pidgin/./pidgin/gtkwebviewtoolbar.c:840
        priv = 0xea8270
        smileys_from_theme = 0xc18d70 [PurpleSmileyList]
        smileys_from_custom = 0x0
        theme_smileys = 0x0
        custom_smileys = 0x0
        it = 0x0
        it_next = 0x7fffefe75b47 <g_object_unref+103>
        webview_format = -2201
        dialog = 0x1
        vbox = 0x1666b80
        smiley_table = 0x0
        supports_custom = 0
        req = {width = 0, height = 0}
        scrolled = 0x0
        viewport = 0x0
#8  0x00007fffefe8bfbf in <emit signal ??? on instance 0x1666b70 [GtkToggleAction]> (instance=instance@entry=0x1666b70, signal_id=<optimized out>, detail=detail@entry=0) at ././gobject/gsignal.c:3447
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffff9780, reg_save_area = 0x7fffffff96c0}}
    #5  0x00007fffefe70f75 in g_closure_invoke (closure=0x164a160, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffff94f0, invocation_hint=invocation_hint@entry=0x7fffffff9470) at ././gobject/gclosure.c:804
                marshal = <optimized out>
                marshal_data = <optimized out>
                in_marshal = 0
                real_closure = 0x164a140
                __func__ = "g_closure_invoke"
    #6  0x00007fffefe82f82 in signal_emit_unlocked_R (node=node@entry=0xc20240, detail=detail@entry=0, instance=instance@entry=0x1666b70, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffff94f0) at ././gobject/gsignal.c:3635
                tmp = <optimized out>
                handler = 0x167adc0
                accumulator = 0x0
                emission = {next = 0x7fffffff98d0, instance = 0x1666b70, ihint = {signal_id = 281, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4}
                handler_list = 0x167adc0
                return_accu = 0x0
                accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                signal_id = 281
                max_sequential_handler_number = 11017
                return_value_altered = 1
    #7  0x00007fffefe8bbdc in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffff96a0) at ././gobject/gsignal.c:3391
                instance_and_params = 0x7fffffff94f0
                signal_return_type = <optimized out>
                param_values = 0x7fffffff9508
                i = <optimized out>
                n_params = <optimized out>
                __func__ = "g_signal_emit_valist"
#9  0x00007ffff1b1d740 in _gtk_action_emit_activate (action=0x1666b70 [GtkToggleAction]) at ././gtk/deprecated/gtkaction.c:909
        group = 0x16793a0 [GtkActionGroup]
#10 0x00007ffff1b1dd4d in gtk_action_activate (action=<optimized out>) at ././gtk/deprecated/gtkaction.c:942
        __func__ = "gtk_action_activate"
#11 0x00007ffff1da3599 in button_clicked (widget=<optimized out>, button=0x1686570 [GtkToggleToolButton]) at ././gtk/gtktoolbutton.c:952
        action = <optimized out>
#15 0x00007fffefe8bfbf in <emit signal ??? on instance 0xe9e4a0 [GtkToggleButton]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ././gobject/gsignal.c:3447
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffff9bf0, reg_save_area = 0x7fffffff9b30}}
    #12 0x00007fffefe70f75 in g_closure_invoke (closure=0xe9f020, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffff9960, invocation_hint=invocation_hint@entry=0x7fffffff98e0) at ././gobject/gclosure.c:804
                marshal = <optimized out>
                marshal_data = <optimized out>
                in_marshal = 0
                real_closure = 0xe9f000
                __func__ = "g_closure_invoke"
    #13 0x00007fffefe82f82 in signal_emit_unlocked_R (node=node@entry=0x6fad10, detail=detail@entry=0, instance=instance@entry=0xe9e4a0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffff9960) at ././gobject/gsignal.c:3635
                tmp = <optimized out>
                handler = 0xe9c380
                accumulator = 0x0
                emission = {next = 0x7fffffff9d70, instance = 0xe9e4a0, ihint = {signal_id = 182, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4}
                handler_list = 0xe9c380
                return_accu = 0x0
                accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                signal_id = 182
                max_sequential_handler_number = 11016
                return_value_altered = 1
    #14 0x00007fffefe8bbdc in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffff9b10) at ././gobject/gsignal.c:3391
                instance_and_params = 0x7fffffff9960
                signal_return_type = <optimized out>
                param_values = 0x7fffffff9978
                i = <optimized out>
                n_params = <optimized out>
                __func__ = "g_signal_emit_valist"
#16 0x00007ffff1ba0d7d in gtk_button_do_release (button=0xe9e4a0 [GtkToggleButton], emit_clicked=<optimized out>) at ././gtk/gtkbutton.c:1843
        priv = <optimized out>
        emit_clicked = <optimized out>
        button = 0xe9e4a0 [GtkToggleButton]
        priv = <optimized out>
#17 0x00007ffff1ba0de5 in gtk_real_button_released (button=0xe9e4a0 [GtkToggleButton]) at ././gtk/gtkbutton.c:1961
#21 0x00007fffefe8bfbf in <emit signal ??? on instance 0xe9e4a0 [GtkToggleButton]> (instance=instance@entry=0xe9e4a0, signal_id=<optimized out>, detail=detail@entry=0) at ././gobject/gsignal.c:3447
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffa090, reg_save_area = 0x7fffffff9fd0}}
    #18 0x00007fffefe70f75 in g_closure_invoke (closure=closure@entry=0x71ca30, return_value=return_value@entry=0x0, n_param_values=1, param_values=param_values@entry=0x7fffffff9e00, invocation_hint=invocation_hint@entry=0x7fffffff9d80) at ././gobject/gclosure.c:804
                marshal = <optimized out>
                marshal_data = <optimized out>
                in_marshal = 0
                real_closure = 0x71ca10
                __func__ = "g_closure_invoke"
    #19 0x00007fffefe8295c in signal_emit_unlocked_R (node=node@entry=0x6fbcf0, detail=detail@entry=0, instance=instance@entry=0xe9e4a0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffff9e00) at ././gobject/gsignal.c:3565
                accumulator = 0x0
                emission = {next = 0x7fffffffa4a0, instance = 0xe9e4a0, ihint = {signal_id = 181, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 7256448}
                handler_list = <optimized out>
                return_accu = 0x0
                accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                signal_id = 181
                max_sequential_handler_number = 11016
                return_value_altered = <optimized out>
    #20 0x00007fffefe8bbdc in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffff9fb0) at ././gobject/gsignal.c:3391
                instance_and_params = 0x7fffffff9e00
                signal_return_type = <optimized out>
                param_values = 0x7fffffff9e18
                i = <optimized out>
                n_params = <optimized out>
                __func__ = "g_signal_emit_valist"
#22 0x00007ffff1b9f1e0 in multipress_released_cb (gesture=0x14c4690 [GtkGestureMultiPress], n_press=<optimized out>, x=<optimized out>, y=<optimized out>, widget=0xe9e4a0 [GtkToggleButton]) at ././gtk/gtkbutton.c:666
        button = 0xe9e4a0 [GtkToggleButton]
        priv = 0xe9e320
        sequence = <optimized out>
#23 0x00007fffe5c49038 in ffi_call_unix64 () at /usr/lib/x86_64-linux-gnu/libffi.so.6
#24 0x00007fffe5c48a9a in ffi_call () at /usr/lib/x86_64-linux-gnu/libffi.so.6
#25 0x00007fffefe71c8a in g_cclosure_marshal_generic_va (closure=0xe9dde0, return_value=0x0, instance=<optimized out>, args_list=<optimized out>, marshal_data=<optimized out>, n_params=3, param_types=0x656680) at ././gobject/gclosure.c:1604
        rtype = 0x7fffe5c49420 <ffi_type_void>
        rvalue = 0x7fffffffa260
        n_args = 5
        atypes = 0x7fffffffa220
        args = 0x7fffffffa1e0
        storage = 0x7fffffffa1b0
        i = <optimized out>
        cif = {abi = FFI_UNIX64, nargs = 5, arg_types = 0x7fffffffa220, rtype = 0x7fffe5c49420 <ffi_type_void>, bytes = 0, flags = 2048}
        cc = 0xe9dde0
        enum_tmpval = <optimized out>
        tmpval_used = 0
        args_copy = {{gp_offset = 32, fp_offset = 80, overflow_arg_area = 0x7fffffffa680, reg_save_area = 0x7fffffffa5c0}}
#26 0x00007fffefe711a4 in _g_closure_invoke_va (closure=closure@entry=0xe9dde0, return_value=return_value@entry=0x0, instance=instance@entry=0x14c4690, args=args@entry=0x7fffffffa5a0, n_params=<optimized out>, param_types=0x656680) at ././gobject/gclosure.c:867
        marshal = <optimized out>
        marshal_data = <optimized out>
        in_marshal = 0
        real_closure = 0xe9ddc0
        __func__ = "_g_closure_invoke_va"
#27 0x00007fffefe8b8cd in g_signal_emit_valist (instance=0x14c4690, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffa5a0) at ././gobject/gsignal.c:3300
        return_accu = <optimized out>
        accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        accumulator = 0x0
        emission = {next = 0x7fffffffa830, instance = 0x14c4690, ihint = {signal_id = 265, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 11498224}
        signal_id = <optimized out>
        instance_type = <optimized out>
        emission_return = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        rtype = 4
        static_scope = 0
        fastpath_handler = <optimized out>
        closure = <optimized out>
        run_type = <optimized out>
        l = <optimized out>
        fastpath = <optimized out>
        instance_and_params = <optimized out>
        signal_return_type = <optimized out>
        param_values = <optimized out>
        i = <optimized out>
        n_params = <optimized out>
        __func__ = "g_signal_emit_valist"
#28 0x00007fffefe8bfbf in g_signal_emit (instance=instance@entry=0x14c4690, signal_id=<optimized out>, detail=detail@entry=0) at ././gobject/gsignal.c:3447
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffa680, reg_save_area = 0x7fffffffa5c0}}
#29 0x00007ffff1c5ab71 in gtk_gesture_multi_press_end (gesture=0x14c4690 [GtkGestureMultiPress], sequence=<optimized out>) at ././gtk/gtkgesturemultipress.c:282
        multi_press = 0x14c4690 [GtkGestureMultiPress]
        current = <optimized out>
        x = 11
        y = 25
#30 0x00007fffefe73d27 in g_cclosure_marshal_VOID__BOXEDv (closure=0xb0d850, return_value=<optimized out>, instance=0x14c4690, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0xb0d880) at ././gobject/gmarshal.c:1950
        cc = 0xb0d850
        data1 = <optimized out>
        data2 = <optimized out>
        callback = <optimized out>
        arg0 = 0x0
        args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffaa10, reg_save_area = 0x7fffffffa950}}
#31 0x00007fffefe711a4 in _g_closure_invoke_va (closure=closure@entry=0xb0d850, return_value=return_value@entry=0x0, instance=instance@entry=0x14c4690, args=args@entry=0x7fffffffa930, n_params=<optimized out>, param_types=0xb0d880) at ././gobject/gclosure.c:867
        marshal = <optimized out>
        marshal_data = <optimized out>
        in_marshal = 0
        real_closure = 0xb0d830
        __func__ = "_g_closure_invoke_va"
#32 0x00007fffefe8b8cd in g_signal_emit_valist (instance=0x14c4690, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffa930) at ././gobject/gsignal.c:3300
        return_accu = <optimized out>
        accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        accumulator = 0x0
        emission = {next = 0x7fffffffacb0, instance = 0x14c4690, ihint = {signal_id = 260, detail = 0, run_type = G_SIGNAL_RUN_LAST}, state = EMISSION_RUN, chain_type = 11498224}
        signal_id = <optimized out>
        instance_type = <optimized out>
        emission_return = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        rtype = 4
        static_scope = 0
        fastpath_handler = <optimized out>
        closure = <optimized out>
        run_type = <optimized out>
        l = <optimized out>
        fastpath = <optimized out>
        instance_and_params = <optimized out>
        signal_return_type = <optimized out>
        param_values = <optimized out>
        i = <optimized out>
        n_params = <optimized out>
        __func__ = "g_signal_emit_valist"
#33 0x00007fffefe8bfbf in g_signal_emit (instance=instance@entry=0x14c4690, signal_id=<optimized out>, detail=detail@entry=0) at ././gobject/gsignal.c:3447
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffaa10, reg_save_area = 0x7fffffffa950}}
#34 0x00007ffff1c57e3e in _gtk_gesture_set_recognized (sequence=0x0, recognized=0, gesture=0x14c4690 [GtkGestureMultiPress]) at ././gtk/gtkgesture.c:345
        has_matching_touchpoints = <optimized out>
#35 0x00007ffff1c57e3e in _gtk_gesture_check_recognized (gesture=gesture@entry=0x14c4690 [GtkGestureMultiPress], sequence=sequence@entry=0x0) at ././gtk/gtkgesture.c:386
        has_matching_touchpoints = <optimized out>
#36 0x00007ffff1c5946b in gtk_gesture_handle_event (controller=0x14c4690 [GtkGestureMultiPress], event=0x16822a0) at ././gtk/gtkgesture.c:777
        gesture = 0x14c4690 [GtkGestureMultiPress]
        sequence = 0x0
        source_device = <optimized out>
        was_recognized = 1
#37 0x00007ffff1c5c0ed in gtk_gesture_single_handle_event (controller=0x14c4690 [GtkGestureMultiPress], event=0x16822a0) at ././gtk/gtkgesturesingle.c:222
        sequence = <optimized out>
        source_device = <optimized out>
        source = GDK_SOURCE_MOUSE
        button = 1
        i = <optimized out>
        retval = <optimized out>
        test_touchscreen = <optimized out>
#38 0x00007ffff1c2955e in gtk_event_controller_handle_event (controller=0x14c4690 [GtkGestureMultiPress], event=event@entry=0x16822a0) at ././gtk/gtkeventcontroller.c:230
        controller_class = 0xaf69b0
        retval = 0
        __func__ = "gtk_event_controller_handle_event"
#39 0x00007ffff1dee2db in _gtk_widget_run_controllers (widget=0xe9e4a0 [GtkToggleButton], event=0x16822a0, phase=GTK_PHASE_BUBBLE) at ././gtk/gtkwidget.c:7359
        controller_phase = <optimized out>
        next = 0x0
        data = 0xe9d980
        handled = 0
        priv = 0xe9e3b0
        l = <optimized out>
#40 0x00007ffff1ca3ba1 in _gtk_marshal_BOOLEAN__BOXEDv (closure=0x66c880, return_value=0x7ffffffface0, instance=0xe9e4a0, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x621b20) at ././gtk/gtkmarshalers.c:131
        cc = 0x66c880
        data1 = <optimized out>
        data2 = <optimized out>
        callback = <optimized out>
        arg0 = 0x16822a0
        args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffae90, reg_save_area = 0x7fffffffadd0}}
        v_return = <optimized out>
        __func__ = "_gtk_marshal_BOOLEAN__BOXEDv"
#41 0x00007fffefe711a4 in _g_closure_invoke_va (closure=closure@entry=0x66c880, return_value=return_value@entry=0x7ffffffface0, instance=instance@entry=0xe9e4a0, args=args@entry=0x7fffffffadb0, n_params=<optimized out>, param_types=0x621b20) at ././gobject/gclosure.c:867
        marshal = <optimized out>
        marshal_data = <optimized out>
        in_marshal = 0
        real_closure = 0x66c860
        __func__ = "_g_closure_invoke_va"
#42 0x00007fffefe8b3a1 in g_signal_emit_valist (instance=0xe9e4a0, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffadb0) at ././gobject/gsignal.c:3300
        return_accu = <optimized out>
        accu = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        accumulator = 0x621be0
        emission = {next = 0x0, instance = 0xe9e4a0, ihint = {signal_id = 61, detail = 0, run_type = G_SIGNAL_RUN_LAST}, state = EMISSION_RUN, chain_type = 7256448}
        signal_id = <optimized out>
        instance_type = <optimized out>
        emission_return = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        rtype = 20
        static_scope = 0
        fastpath_handler = <optimized out>
        closure = <optimized out>
        run_type = <optimized out>
        l = <optimized out>
        fastpath = <optimized out>
        instance_and_params = <optimized out>
        signal_return_type = <optimized out>
        param_values = <optimized out>
        i = <optimized out>
        n_params = <optimized out>
        __func__ = "g_signal_emit_valist"
#43 0x00007fffefe8bfbf in g_signal_emit (instance=instance@entry=0xe9e4a0, signal_id=<optimized out>, detail=detail@entry=0) at ././gobject/gsignal.c:3447
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffae90, reg_save_area = 0x7fffffffadd0}}
#44 0x00007ffff1df057c in gtk_widget_event_internal (widget=0xe9e4a0 [GtkToggleButton], event=0x16822a0) at ././gtk/gtkwidget.c:7724
        signal_num = <optimized out>
        handled = 0
        event = 0x16822a0
        widget = 0xe9e4a0 [GtkToggleButton]
#45 0x00007ffff1ca0b2e in propagate_event_up (topmost=<optimized out>, event=<optimized out>, widget=0xe9e4a0 [GtkToggleButton]) at ././gtk/gtkmain.c:2578
        tmp = <optimized out>
        handled_event = <optimized out>
        handled_event = 0
#46 0x00007ffff1ca0b2e in propagate_event (widget=<optimized out>, event=0x16822a0, captured=<optimized out>, topmost=0x0) at ././gtk/gtkmain.c:2680
        handled_event = 0
#47 0x00007ffff1ca2bee in gtk_main_do_event (event=0x16822a0) at ././gtk/gtkmain.c:1901
        event_widget = <optimized out>
        grab_widget = 0xe9e4a0 [GtkToggleButton]
        topmost_widget = <optimized out>
        window_group = 0x8f7c10 [GtkWindowGroup]
        rewritten_event = <optimized out>
        device = 0x664000 [GdkX11DeviceCore]
        tmp_list = <optimized out>
        __func__ = "gtk_main_do_event"
#48 0x00007ffff17b3e15 in _gdk_event_emit (event=event@entry=0x16822a0) at ././gdk/gdkevents.c:73
#49 0x00007ffff17e4ea2 in gdk_event_source_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>) at ././gdk/x11/gdkeventsource.c:367
        display = <optimized out>
        event = 0x16822a0
#50 0x00007ffff77e57f7 in g_main_dispatch (context=0x640dc0) at ././glib/gmain.c:3203
        dispatch = 0x7ffff17e4e80 <gdk_event_source_dispatch>
        prev_source = 0x0
        was_in_call = 0
        user_data = 0x0
        callback = 0x0
        cb_funcs = <optimized out>
        cb_data = <optimized out>
        need_destroy = <optimized out>
        source = 0x60a240
        current = 0x694c80
        i = 0
#51 0x00007ffff77e57f7 in g_main_context_dispatch (context=context@entry=0x640dc0) at ././glib/gmain.c:3856
#52 0x00007ffff77e5a60 in g_main_context_iterate (context=0x640dc0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ././glib/gmain.c:3929
        max_priority = 2147483647
        timeout = 315
        some_ready = 1
        nfds = 14
        allocated_nfds = 15
        fds = <optimized out>
#53 0x00007ffff77e5d82 in g_main_loop_run (loop=0x14d7810) at ././glib/gmain.c:4125
        __func__ = "g_main_loop_run"
#54 0x00007ffff1ca1d55 in gtk_main () at ././gtk/gtkmain.c:1312
        loop = 0x14d7810
#55 0x00007ffff7b99910 in pidgin_start (argc=2, argv=0x7fffffffd5a8) at /home/haakon/ws/sipe/pidgin/./pidgin/libpidgin.c:848
        opt_force_online = 0
        opt_help = 0
        opt_login = 0
        opt_nologin = 0
        opt_version = 0
        opt_si = 1
        opt_config_dir_arg = 0x0
        opt_login_arg = 0x0
        opt_session_arg = 0x0
        search_path = 0xae84e0 "/home/haakon/.config/gplugin"
        provider = 0x7f72e0 [GtkCssProvider]
        screen = 0x0
        accounts = 0x7
        sig_indx = 1
        sigset = {__val = {82950, 0 <repeats 15 times>}}
        errmsg = "\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\336\367\377\177\000\000\001\000\000\000\377\177\000\000\300\231\361\367\377\177", '\000' <repeats 12 times>, "\302\t\275\357\377\377\200\353\334\343\377\177\000\000\337`\336\367\377\177\000\000\001\000\000\000\377\177\000\000\350\223\361\367\377\177\000\000P\263\377\377\377\177\000\000\000\000\302\t\275\357\377\377\370aX\344\377\177\000\000\337`\336\367\377\177\000\000\001\000\000\000\377\177\000\000\360\216\361\367\377\177\000\000\200\263\377\377\377\177\000\000\000\000\302\t\275\357\377\377\350aX\344\377\177\000\000\337`\336\367\377\177\000\000\001\000\000\000\377\177\000\000\360\211\361\367\377\177\000\000\260\263\377\377\377\177\000\000\000\000"...
        signal_channel = 0x640ea0
        signal_status = G_IO_STATUS_NORMAL
        signal_channel_watcher = 1
        segfault_message_tmp = 0x640fb0 "\260", <incomplete sequence \352\214>
        opt = -1
        gui_check = 0
        debug_enabled = 1
        debug_colored = 0
        active_accounts = 0xd65aa0
        st = {st_dev = 65026, st_ino = 6164527, st_nlink = 2, st_mode = 16877, st_uid = 10000, st_gid = 10000, __pad0 = 0, st_rdev = 0, st_size = 4096, st_blksize = 4096, st_blocks = 8, st_atim = {tv_sec = 1406232328, tv_nsec = 786017533}, st_mtim = {tv_sec = 1433936244, tv_nsec = 914702663}, st_ctim = {tv_sec = 1433936244, tv_nsec = 914702663}, __glibc_reserved = {0, 0, 0}}
        error = 0x67ab20
        long_options = {{name = 0x7ffff7bb7c03 "config", has_arg = 1, flag = 0x0, val = 99}, {name = 0x7ffff7bb7c0a "debug", has_arg = 2, flag = 0x0, val = 100}, {name = 0x7ffff7bb7c10 "force-online", has_arg = 0, flag = 0x0, val = 102}, {name = 0x7ffff7bb7c1d "help", has_arg = 0, flag = 0x0, val = 104}, {name = 0x7ffff7bb7c22 "login", has_arg = 2, flag = 0x0, val = 108}, {name = 0x7ffff7bb7c28 "multiple", has_arg = 0, flag = 0x0, val = 109}, {name = 0x7ffff7bb7c31 "nologin", has_arg = 0, flag = 0x0, val = 110}, {name = 0x7ffff7bb7c39 "session", has_arg = 1, flag = 0x0, val = 115}, {name = 0x7ffff7bb7327 "version", has_arg = 0, flag = 0x0, val = 118}, {name = 0x7ffff7bb7c41 "display", has_arg = 1, flag = 0x0, val = 68}, {name = 0x7ffff7bb7c49 "sync", has_arg = 0, flag = 0x0, val = 83}, {name = 0x0, has_arg = 0, flag = 0x0, val = 0}}
#56 0x00000000004008cd in main (argc=2, argv=0x7fffffffd5a8) at /home/haakon/ws/sipe/pidgin/./pidgin/pidgin.c:50
        test_prgname = 0x0
grimmy commented 7 years ago

Why oh why are you running purple/pidgin3?! Those are a not supported versions which are seeing heavy traffic for API instability.

That said, yes a pull request that was open for 6 months was finally merged.

That said I'm not sure when I can look at this, but these seems like a perfect use case for some unit testing...

rbeldin commented 7 years ago

Well, I'm getting pidgin from the ppa:

apt-cache madison pidgin pidgin | 1:3.0.0~collab-1+201706050632~ubuntu17.04.1 | http://ppa.launchpad.net/sipe-collab/ppa/ubuntu zesty/main amd64 Packages pidgin | 1:2.12.0-1ubuntu1 | http://us.archive.ubuntu.com/ubuntu zesty/universe amd64 Packages pidgin | 1:2.12.0-1ubuntu1 | http://us.archive.ubuntu.com/ubuntu zesty/universe Sources

grimmy commented 7 years ago

@rbeldin my comments were directed at @xhaakon.

Also that PPA is not from Pidgin itself. Pidgin has not released libpurple3/pidgin3 and we offer no guarantees on it's stability or anything as it is unreleased. That said, it should mostly work, but there are big issues coming up that are going to cause some serious problems for users.

@xhaakon if you want to drop by devel@conference.pidgin.im or contact me in another fashion we can go over these issues in more detail. That said, sorry for the bug, but thanks for finding it, I'm going to try to prioritize it to get it knocked out.

grimmy commented 7 years ago

A proposed fix can be found here https://bitbucket.org/pidgin/main/pull-requests/203

xhaakon commented 7 years ago

@grimmy I'm well aware Pidgin 3 is under development and there are no guarantees. I included you into this conversation just to let you know about the bug we found, not to complain something got broken :)

I checked the pull request and confirm the crash is gone. Thanks for your quick response and fix!

The reasons for us using Pidgin 3.0 go back to when 2.x libpurple didn't support GStreamer 1.0, which we needed for implementing call encryption and other stuff. Although those media features have been ported back to the stable Pidgin branch since then, 3.0 has worked well enough, so we stuck with it in our PPA builds.

That said, thanks again for your hard work.

xhaakon commented 7 years ago

@rbeldin I've rebuilt pidgin in PPA with grimmy's fix, so please update.

rbeldin commented 7 years ago

@xhaakon Works perfectly. Thanks very much.

grimmy commented 7 years ago

@xhaakon note, there may be changes to that in the future as it's not merged to mainline yet...