From d6dcc9878eb74fbd0412b85c75a0156dba416c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 7 Dec 2023 13:51:07 -0500 Subject: [PATCH] misc: avoid crash if no certificate added for device Using foundAccountDevice with a dht::PkId, can add known devices without certificates. Iterating over knownDevices_ without checking any certificate will lead to a segfault. This will not happen under normal circumstances, because foundAccountDevice only uses certificates, except for testing purpose Change-Id: I9bf6682d7d6539c0f905e80995333db0d948c5af --- src/jamidht/archive_account_manager.cpp | 4 ++++ src/jamidht/contact_list.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/jamidht/archive_account_manager.cpp b/src/jamidht/archive_account_manager.cpp index 7cf0edb0f4..0fc8c299af 100644 --- a/src/jamidht/archive_account_manager.cpp +++ b/src/jamidht/archive_account_manager.cpp @@ -527,6 +527,10 @@ ArchiveAccountManager::syncDevices() // don't send sync data to ourself if (dev.first.toString() == info_->deviceId) continue; + if (!dev.second.certificate) { + JAMI_WARNING("Cannot find certificate for {}", dev.first); + continue; + } auto pk = dev.second.certificate->getSharedPublicKey(); JAMI_DBG("sending device sync to %s %s", dev.second.name.c_str(), diff --git a/src/jamidht/contact_list.cpp b/src/jamidht/contact_list.cpp index 187bc32637..5f299cb555 100644 --- a/src/jamidht/contact_list.cpp +++ b/src/jamidht/contact_list.cpp @@ -595,6 +595,10 @@ ContactList::getSyncData() const } for (const auto& dev : knownDevices_) { + if (!dev.second.certificate) { + JAMI_WARNING("No certificate found for {}", dev.first); + continue; + } sync_data.devices.emplace(dev.second.certificate->getLongId(), KnownDeviceSync {dev.second.name, dev.second.certificate->getId()}); -- GitLab