From 1ca474e722bf5f35e6c482de590b76d167053cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Fri, 8 Mar 2019 17:10:43 +0100 Subject: [PATCH] [omemo] Fix an endless loop with devicelists --- omemo/modules/omemo.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/omemo/modules/omemo.py b/omemo/modules/omemo.py index 9dd51d6..1f4fa03 100644 --- a/omemo/modules/omemo.py +++ b/omemo/modules/omemo.py @@ -443,10 +443,13 @@ class OMEMO(BaseModule): app.nec.push_incoming_event( NetworkEvent('omemo-new-fingerprint', chat_control=ctrl)) - def set_devicelist(self): + def set_devicelist(self, devicelist=None): + devicelist_ = set([self.backend.own_device]) + if devicelist is not None: + devicelist_.add(devicelist) log.info('%s => Publishing own devicelist: %s', - self._account, self.backend.devices_for_publish) - self._nbxmpp('OMEMO').set_devicelist(self.backend.devices_for_publish) + self._account, devicelist_) + self._nbxmpp('OMEMO').set_devicelist(devicelist_) def clear_devicelist(self): self.backend.update_devicelist(self._own_jid, [self.backend.own_device]) @@ -488,7 +491,8 @@ class OMEMO(BaseModule): log.info('%s => Received device list for %s: %s', self._account, jid, devicelist) - self.backend.update_devicelist(jid, devicelist) + # Pass a copy, we need the full list for potential set_devicelist() + self.backend.update_devicelist(jid, list(devicelist)) if jid in self._query_for_bundles: self._query_for_bundles.remove(jid) @@ -497,7 +501,7 @@ class OMEMO(BaseModule): if not self.backend.is_own_device_published: # Our own device_id is not in the list, it could be # overwritten by some other client - self.set_devicelist() + self.set_devicelist(devicelist) self._check_for_missing_sessions(jid)