From d5fdc148c98fa9e4f9276c3fcd5246592c98d162 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Wed, 19 Apr 2023 08:51:31 -0400
Subject: [PATCH] conversationrepository: avoid segv in devices()

GitLab: #847
Change-Id: Ia36596dc9250789b30536ff312bf6a3198bf7a10
---
 src/jamidht/conversationrepository.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/jamidht/conversationrepository.cpp b/src/jamidht/conversationrepository.cpp
index ab39480514..899d574cd8 100644
--- a/src/jamidht/conversationrepository.cpp
+++ b/src/jamidht/conversationrepository.cpp
@@ -189,12 +189,17 @@ public:
 
     std::map<std::string, std::vector<DeviceId>> devices() const
     {
+        auto repo = repository();
+        if (!repo)
+            return {};
         std::map<std::string, std::vector<DeviceId>> memberDevices;
         std::string deviceDir = fmt::format("{}devices/",
-                                            git_repository_workdir(repository().get()));
+                                            git_repository_workdir(repo.get()));
         for (const auto& file : fileutils::readDirectory(deviceDir)) {
             auto cert = std::make_shared<dht::crypto::Certificate>(
                 fileutils::loadFile(deviceDir + file));
+            if (!cert)
+                continue;
             memberDevices[cert->getIssuerUID()].emplace_back(cert->getPublicKey().getLongId());
         }
         return memberDevices;
-- 
GitLab