Bug 319362

Summary: ktp-contactlist crash on show contact info with custom connection manager
Product: [Unmaintained] telepathy Reporter: Maksim Melnikau <maxposedon>
Component: contactlistAssignee: Telepathy Bugs <kde-telepathy-bugs>
Status: RESOLVED FIXED    
Severity: crash CC: kde
Priority: NOR    
Version: 0.6.1   
Target Milestone: Future   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:
Attachments: full dbus-monitor log, during the crash

Description Maksim Melnikau 2013-05-05 14:02:19 UTC
Application: ktp-contactlist (0.6.1)
KDE Platform Version: 4.10.2 (Compiled from sources)
Qt Version: 4.8.4
Operating System: Linux 3.9.0-gentoo x86_64
Distribution: "Gentoo Base System release 2.2"

-- Information about the crash:
- What I was doing when the application crashed:
Click "Show Info" on contact.

- Custom settings of the application:
It doesn't happens with other connection managers, but happens with my custom telepathy-foo ( https://github.com/max-posedon/telepathy-foo )

The crash can be reproduced every time.

-- Backtrace:
Application: KDE Telepathy Contact List (ktp-contactlist), signal: Segmentation fault
Using host libthread_db library "/lib64/libthread_db.so.1".
[KCrash Handler]
#5  0x00007f434e61028a in KTp::ContactInfoDialog::Private::onContactUpgraded(Tp::PendingOperation*) () from /usr/lib64/libktpcommoninternalsprivate.so.5
#6  0x00007f434cc9479f in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib64/qt4/libQtCore.so.4
#7  0x00007f434eacdd1f in Tp::PendingOperation::finished(Tp::PendingOperation*) () from /usr/lib64/libtelepathy-qt4.so.2
#8  0x00007f434eacde01 in Tp::PendingOperation::emitFinished() () from /usr/lib64/libtelepathy-qt4.so.2
#9  0x00007f434cc92f1e in QObject::event(QEvent*) () from /usr/lib64/qt4/libQtCore.so.4
#10 0x00007f434b904f1c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/qt4/libQtGui.so.4
#11 0x00007f434b906c9a in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/qt4/libQtGui.so.4
#12 0x00007f434dd5d7c6 in KApplication::notify(QObject*, QEvent*) () from /usr/lib64/libkdeui.so.5
#13 0x00007f434cc7e29e in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib64/qt4/libQtCore.so.4
#14 0x00007f434cc81ac1 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib64/qt4/libQtCore.so.4
#15 0x00007f434ccabae3 in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () from /usr/lib64/qt4/libQtCore.so.4
#16 0x00007f4347dfc795 in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#17 0x00007f4347dfcad8 in g_main_context_iterate.isra.22 () from /usr/lib64/libglib-2.0.so.0
#18 0x00007f4347dfcb94 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#19 0x00007f434ccabc76 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/qt4/libQtCore.so.4
#20 0x00007f434b99ff7e in QGuiEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/qt4/libQtGui.so.4
#21 0x00007f434cc7cfff in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/qt4/libQtCore.so.4
#22 0x00007f434cc7d288 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/qt4/libQtCore.so.4
#23 0x00007f434cc81dd8 in QCoreApplication::exec() () from /usr/lib64/qt4/libQtCore.so.4
#24 0x000000000041e4c3 in main ()

Reported using DrKonqi
Comment 1 Maksim Melnikau 2013-05-05 14:07:19 UTC
Created attachment 79715 [details]
full dbus-monitor log, during the crash

looks like ktp-contactlist don't ready for errors from connection manager side, in this case for
"
method call sender=:1.225 -> dest=:1.209 serial=80 path=/org/freedesktop/Telepathy/Connection/foo/foo/xxx; interface=org.freedesktop.Telepathy.Connection.Interface.Contacts; member=GetContactAttributes
   array [
      uint32 3
   ]
   array [
      string "org.freedesktop.Telepathy.Connection.Interface.ContactInfo"
   ]
   boolean true
error sender=:1.209 -> dest=:1.225 error_name=org.freedesktop.DBus.Python.NotImplementedError reply_serial=80
   string "Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/dbus/service.py", line 707, in _message_cb
    retval = candidate_method(self, *args, **keywords)
  File "/home/max_posedon/GitHub/telepathy-python/telepathy/server/conn.py", line 744, in GetContactAttributes
    results = functions[interface](handles)
  File "/home/max_posedon/GitHub/telepathy-python/telepathy/server/conn.py", line 737, in <lambda>
    CONNECTION_INTERFACE_CONTACT_INFO: lambda x: self.GetContactInfo(x).items()
  File "/home/max_posedon/GitHub/telepathy-python/telepathy/_generated/Connection_Interface_Contact_Info.py", line 70, in GetContactInfo
    raise NotImplementedError
NotImplementedError
"
Comment 2 David Edmundson 2013-05-05 20:03:11 UTC
Given your output we almost certainly this this:

    Q_ASSERT(contacts->contacts().count() == 1);

We assume the contact will be returned properly. I guess we can/should guard against this.
Comment 3 David Edmundson 2013-05-05 20:03:59 UTC
*hit this
Comment 4 David Edmundson 2013-06-10 20:24:00 UTC
Git commit 347988c448dd503d7f1c813dd5b96ac293bcd20a by David Edmundson.
Committed on 10/06/2013 at 22:10.
Pushed by davidedmundson into branch 'master'.

Check upgradeContacts succeeded

M  +4    -0    KTp/contact-info-dialog.cpp

http://commits.kde.org/telepathy-common-internals/347988c448dd503d7f1c813dd5b96ac293bcd20a