intercom: segfault while deleting self-conversation
How to reproduce:
- Create a conversation with yourself
- Try to remove it using "Remove conversation" in the smartlist
The daemon segfaults.
Stacktrace:
Thread 1 "dring" received signal SIGSEGV, Segmentation fault.
0x00007fffef394153 in asn1_delete_structure2 () from /usr/lib/x86_64-linux-gnu/libtasn1.so.6
(gdb) bt
#0 0x00007fffef394153 in asn1_delete_structure2 () at /usr/lib/x86_64-linux-gnu/libtasn1.so.6
#1 0x00007ffff64ccf09 in gnutls_x509_crl_deinit () at /usr/lib/x86_64-linux-gnu/libgnutls.so.30
#2 0x00007ffff6504544 in gnutls_x509_trust_list_deinit () at /usr/lib/x86_64-linux-gnu/libgnutls.so.30
#3 0x00005555558d9b8e in dht::crypto::TrustList::operator=(dht::crypto::TrustList&&) ()
#4 0x000055555561d064 in ring::tls::TrustStore::rebuildTrust() (this=this@entry=0x555555dc5a48)
at certstore.cpp:549
#5 0x00005555556225d0 in ring::tls::TrustStore::setCertificateStatus(std::shared_ptr<dht::crypto::Certificate>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ring::tls::TrustStore::PermissionStatus, bool) (this=0x555555dc5a48, cert=std::shared_ptr<dht::crypto::Certificate> (empty) = {...}, cert_id="eb3c27067c4637b99bf9895d5babb2c77c3115b5", status=status@entry=ring::tls::TrustStore::PermissionStatus::UNDEFINED, local=local@entry=false) at certstore.cpp:468
#6 0x0000555555622ddc in ring::tls::TrustStore::setCertificateStatus(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ring::tls::TrustStore::PermissionStatus) (this=<optimized out>, cert_id="eb3c27067c4637b99bf9895d5babb2c77c3115b5", status=status@entry=ring::tls::TrustStore::PermissionStatus::UNDEFINED) at certstore.cpp:416
#7 0x0000555555677fd2 in ring::RingAccount::removeContact(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (this=this@entry=
0x555555dc4430, uri="eb3c27067c4637b99bf9895d5babb2c77c3115b5", ban=ban@entry=false)
at ringaccount.cpp:2941
#8 0x000055555560a260 in DRing::removeContact(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (accountId="bde9e076abf742fb", uri="eb3c27067c4637b99bf9895d5babb2c77c3115b5", ban=<optimized out>) at configurationmanager.cpp:340
#9 0x00005555555d3304 in DBusConfigurationManager::removeContact(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool const&) (ban=@0x7fffffffdbff: false, uri="eb3c27067c4637b99bf9895d5babb2c77c3115b5", accountId="bde9e076abf742fb", this=0x555555b48880) at dbusconfigurationmanager.cpp:551
#10 0x00005555555d3304 in cx::ring::Ring::ConfigurationManager_adaptor::_removeContact_stub(DBus::CallMessage const&) (this=0x555555b48880, call=...) at dbusconfigurationmanager.adaptor.h:2323
#11 0x00005555555d0397 in DBus::Callback<cx::ring::Ring::ConfigurationManager_adaptor, DBus::Message, DBus::CallMessage const&>::call(DBus::CallMessage const&) const (this=<optimized out>, param=...)
at /home/hle/Development/ring/ring-daemon/contrib/x86_64-linux-gnu/include/dbus-c++-1/dbus-c++/util.h:283
#12 0x00005555555ebcbe in DBus::Slot<DBus::Message, DBus::CallMessage const&>::call(DBus::CallMessage const&) const ()
#13 0x00005555555eacfd in DBus::InterfaceAdaptor::dispatch_method(DBus::CallMessage const&) ()
#14 0x00005555555f3d92 in DBus::ObjectAdaptor::handle_message(DBus::Message const&) ()
#15 0x00005555555f3427 in DBus::ObjectAdaptor::Private::message_function_stub(DBusConnection*, DBusMessage*, void*) ()
#16 0x00007ffff7bad440 in () at /lib/x86_64-linux-gnu/libdbus-1.so.3
#17 0x00007ffff7b9e20a in dbus_connection_dispatch () at /lib/x86_64-linux-gnu/libdbus-1.so.3
#18 0x00005555555e1d8a in DBus::Connection::Private::do_dispatch() ()
#19 0x00005555555e533e in DBus::Dispatcher::dispatch_pending(std::__cxx11::list<DBus::Connection::Private*, std::allocator<DBus::Connection::Private*> >&) ()
#20 0x00005555555e516e in DBus::Dispatcher::dispatch_pending() ()
#21 0x00005555555e9156 in DBus::BusDispatcher::do_iteration() ()
#22 0x00005555555e8e89 in DBus::BusDispatcher::enter() ()
#23 0x00005555555ac3ff in DBusClient::event_loop() (this=<optimized out>) at dbusclient.cpp:250
#24 0x00005555555a63e2 in main(int, char**) (argc=2, argv=<optimized out>) at main.cpp:236
(gdb) up 7
#7 0x0000555555677fd2 in ring::RingAccount::removeContact (this=this@entry=0x555555dc4430,
uri="eb3c27067c4637b99bf9895d5babb2c77c3115b5", ban=ban@entry=false) at ringaccount.cpp:2941
2941 trust_.setCertificateStatus(uri, ban ? tls::TrustStore::PermissionStatus::BANNED
(gdb) l
2936 c = contacts_.emplace(h, Contact{}).first;
2937 else if (not c->second.isActive() and c->second.banned == ban)
2938 return;
2939 c->second.removed = std::time(nullptr);
2940 c->second.banned = ban;
2941 trust_.setCertificateStatus(uri, ban ? tls::TrustStore::PermissionStatus::BANNED
2942 : tls::TrustStore::PermissionStatus::UNDEFINED);
2943 if (ban and trustRequests_.erase(h) > 0)
2944 saveTrustRequests();
2945 saveContacts();
(gdb) p ban
$1 = false
(gdb)