Handle empty-string contact IDs
@pwithnall
Submitted by Philip Withnall Link to original bug (#667149)
Description
There's nothing in the Tp specification which forbids a contact's ID from being the empty string. However, we use the contact's ID as their IM address, and forbid IM addresses from being empty strings.
There's a fundamental incompatibility here which should either result in us allowing empty strings as IM addresses, or (more likely) forbidding empty strings from being used as contact IDs by Telepathy.
(Found by my D-Bus simulator injecting an empty string as a contact ID into the results of a GetContactAttributes D-Bus call.)
Stack trace:
Core was generated by `/opt/gnome3/build/bin/empathy'. Program terminated with signal 6, Aborted.
#0 0x0000003f41e36285 in raise () from /lib64/libc.so.6
Missing separate debuginfos, use: debuginfo-install NetworkManager-glib-0.9.2-1.fc16.x86_64 dbus-libs-1.4.10-3.fc16.x86_64 flac-1.2.1-6.fc12.x86_64 freetype-2.4.6-4.fc16.x86_64 geoclue-0.12.0-7.fc16.x86_64 glibc-2.14.90-24.fc16.4.x86_64 libICE-1.0.7-1.fc16.x86_64 libSM-1.2.0-2.fc15.x86_64 libX11-1.4.3-1.fc16.x86_64 libXau-1.0.6-2.fc15.x86_64 libXcomposite-0.4.3-2.fc15.x86_64 libXcursor-1.1.11-3.fc15.x86_64 libXdamage-1.1.3-2.fc15.x86_64 libXext-1.3.0-1.fc16.x86_64 libXfixes-5.0-1.fc16.x86_64 libXi-1.4.5-1.fc16.x86_64 libXinerama-1.1.1-2.fc15.x86_64 libXrandr-1.3.1-2.fc15.x86_64 libXrender-0.9.6-2.fc15.x86_64 libXt-1.1.1-1.fc16.x86_64 libXtst-1.2.0-2.fc15.x86_64 libasyncns-0.8-2.fc15.x86_64 libffi-3.0.10-1.fc16.x86_64 libgcc-4.6.2-1.fc16.x86_64 libgudev1-173-3.fc16.x86_64 libicu-4.6-3.fc16.x86_64 libjpeg-turbo-1.1.1-3.fc16.x86_64 libogg-1.2.2-3.fc15.x86_64 libpng-1.2.46-1.fc16.x86_64 libselinux-2.1.6-5.fc16.x86_64 libstdc++-4.6.2-1.fc16.x86_64 libtool-ltdl-2.4-7.fc16.x86_64 libudev-173-3.fc16.x86_64 libunistring-0.9.3-2.fc15.x86_64 libuuid-2.20.1-2.1.fc16.x86_64 libvorbis-1.3.2-1.fc15.x86_64 libxcb-1.7-3.fc16.x86_64 libxml2-2.7.8-6.fc16.x86_64 nss-3.13.1-9.fc16.x86_64 nss-util-3.13.1-3.fc16.x86_64 pulseaudio-libs-0.9.23-1.fc16.x86_64 pulseaudio-libs-glib2-0.9.23-1.fc16.x86_64 sqlite-3.7.7.1-1.fc16.x86_64 tcp_wrappers-libs-7.6-64.fc16.x86_64 webkitgtk3-1.6.1-1.fc16.x86_64 zlib-1.2.5-5.fc16.x86_64
(gdb) bt
#0 0x0000003f41e36285 in raise () from /lib64/libc.so.6
#1 0x0000003f41e37b9b in abort () from /lib64/libc.so.6
#2 0x00007ffff724d344 in folks_im_field_details_construct (object_type=11331248, value=0xb27860 "", parameters=0x0)
at /opt/gnome2/source/folks/folks/im-details.vala:65
#3 0x00007ffff724d3b7 in folks_im_field_details_new (value=0xb27860 "", parameters=0x0)
at /opt/gnome2/source/folks/folks/im-details.vala:59
#4 0x00007ffff74c3ca5 in tpf_persona_constructor (type=11325520, n_construct_properties=6, construct_properties=0xa5fe40)
at /opt/gnome2/source/folks/backends/telepathy/lib/tpf-persona.vala:672
#5 0x00007ffff2c68ad3 in g_object_newv (object_type=11325520, n_parameters=6, parameters=0xa6b390) at gobject.c:1622
#6 0x00007ffff2c6929e in g_object_new_valist (object_type=11325520, first_property_name=0x7ffff74eb5b1 "contact",
var_args=0x7fffffffe310) at gobject.c:1739
#7 0x00007ffff2c6851e in g_object_new (object_type=11325520, first_property_name=0x7ffff74eb5b1 "contact") at gobject.c:1454
#8 0x00007ffff74bf06c in tpf_persona_construct (object_type=11325520, contact=0xa161c0, store=0xa101b0)
at /opt/gnome2/source/folks/backends/telepathy/lib/tpf-persona.vala:620
#9 0x00007ffff74bf157 in tpf_persona_new (contact=0xa161c0, store=0xa101b0)
at /opt/gnome2/source/folks/backends/telepathy/lib/tpf-persona.vala:613
#10 0x00007ffff74d7322 in _tpf_persona_store_add_persona_from_contact (self=0xa101b0, contact=0xa161c0, from_contact_list=0)
at /opt/gnome2/source/folks/backends/telepathy/lib/tpf-persona-store.vala:2021
#11 0x00007ffff74ce5b2 in __lambda4_ (self=0xa101b0, conn=0x8f7580, contacts=0xa6aaa0, contacts_length1=1, failed=0xa45110,
failed_length1=0, _error_=0x0, weak_object=0xa101b0) at /opt/gnome2/source/folks/backends/telepathy/lib/tpf-persona-store.vala:1171
#12 0x00007ffff74ce7b7 in ___lambda4__tp_connection_contacts_by_handle_cb (connection=0x8f7580, n_contacts=1, contacts=0xa6aaa0,
n_failed=0, failed=0xa45110, _error_=0x0, self=0xa101b0, weak_object=0xa101b0)
at /opt/gnome2/source/folks/backends/telepathy/lib/tpf-persona-store.vala:1153
#13 0x00007ffff5e2a0be in contacts_context_continue (c=0x90ae30) at contact.c:1845
#14 0x00007ffff5e2bac6 in connection_capabilities_fetched_cb (object=0x8f7580, res=0xb29800, user_data=0x90ae30) at contact.c:2553
#15 0x00007ffff3124162 in g_simple_async_result_complete (simple=0xb29800) at gsimpleasyncresult.c:744
#16 0x00007ffff5e170e6 in tp_connection_get_rcc_cb (proxy=0x8f7580, value=0xa836b0, error=0x0, user_data=0x0, weak_object=0x0)
at connection.c:544
#17 0x00007ffff5e7fa69 in _tp_cli_dbus_properties_invoke_callback_get (self=0x8f7580, error=0x0, args=0x989ac0,
generic_callback=0x7ffff5e16f3a <tp_connection_get_rcc_cb>, user_data=0x0, weak_object=0x0) at _gen/tp-cli-generic-body.h:764
#18 0x00007ffff5e8697a in tp_proxy_pending_call_idle_invoke (p=0xb29860) at proxy-methods.c:153
#19 0x00007ffff27620e3 in g_idle_dispatch (source=0xa5b080, callback=0x7ffff5e86857 <tp_proxy_pending_call_idle_invoke>,
user_data=0xb29860) at gmain.c:4632
#20 0x00007ffff275f9c1 in g_main_dispatch (context=0x77a8f0) at gmain.c:2513
#21 0x00007ffff276067d in g_main_context_dispatch (context=0x77a8f0) at gmain.c:3050
#22 0x00007ffff2760860 in g_main_context_iterate (context=0x77a8f0, block=1, dispatch=1, self=0x8a6f80) at gmain.c:3121
#23 0x00007ffff2760924 in g_main_context_iteration (context=0x77a8f0, may_block=1) at gmain.c:3182
#24 0x00007ffff315ae96 in g_application_run (application=0x7bb360, argc=1, argv=0x7fffffffecf8) at gapplication.c:1599
#25 0x0000000000457da0 in main (argc=1, argv=0x7fffffffecf8) at empathy.c:869
(gdb) frame 4
#4 0x00007ffff74c3ca5 in tpf_persona_constructor (type=11325520, n_construct_properties=6, construct_properties=0xa5fe40)
at /opt/gnome2/source/folks/backends/telepathy/lib/tpf-persona.vala:672
672 var im_fd = new ImFieldDetails (im_addr);
(gdb) print _tmp28_
$1 = (const gchar *) 0xa64420 ""
(gdb) print _tmp30_
$2 = (const gchar *) 0x778150 "proto"
Version: git master