From cb5b3bd29dc15c70539c6c268048a87f2e21d3ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Mon, 14 Jun 2021 15:58:12 -0400
Subject: [PATCH] jamiaccount: do not crash on a failing mode()

Change-Id: I69bf2a2b2a8c7fed6d38c1b85ab9d8069442b4d1
---
 src/jamidht/jamiaccount.cpp | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/jamidht/jamiaccount.cpp b/src/jamidht/jamiaccount.cpp
index 2578313769..0b19db416e 100644
--- a/src/jamidht/jamiaccount.cpp
+++ b/src/jamidht/jamiaccount.cpp
@@ -5142,11 +5142,15 @@ JamiAccount::removeRepository(const std::string& conversationId, bool sync, bool
     std::unique_lock<std::mutex> lk(conversationsMtx_);
     auto it = conversations_.find(conversationId);
     if (it != conversations_.end() && it->second && (force || it->second->isRemoving())) {
-        if (it->second->mode() == ConversationMode::ONE_TO_ONE) {
-            for (const auto& member : it->second->getInitialMembers()) {
-                if (member != getUsername())
-                    accountManager_->removeContactConversation(member);
+        try {
+            if (it->second->mode() == ConversationMode::ONE_TO_ONE) {
+                for (const auto& member : it->second->getInitialMembers()) {
+                    if (member != getUsername())
+                        accountManager_->removeContactConversation(member);
+                }
             }
+        } catch (const std::exception& e) {
+            JAMI_ERR() << e.what();
         }
         JAMI_DBG() << "Remove conversation: " << conversationId;
         it->second->erase();
@@ -5206,12 +5210,16 @@ JamiAccount::getOneToOneConversation(const std::string& uri) const
         // removing self can remove all conversations
         if (!conv)
             continue;
-        if (conv->mode() == ConversationMode::ONE_TO_ONE) {
-            auto initMembers = conv->getInitialMembers();
-            if (isSelf && initMembers.size() == 1)
-                return key;
-            if (std::find(initMembers.begin(), initMembers.end(), uri) != initMembers.end())
-                return key;
+        try {
+            if (conv->mode() == ConversationMode::ONE_TO_ONE) {
+                auto initMembers = conv->getInitialMembers();
+                if (isSelf && initMembers.size() == 1)
+                    return key;
+                if (std::find(initMembers.begin(), initMembers.end(), uri) != initMembers.end())
+                    return key;
+            }
+        } catch (const std::exception& e) {
+            JAMI_ERR() << e.what();
         }
     }
     return {};
-- 
GitLab