From f6f92845f84301619f4c48eed9364b25db0b1445 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Thu, 21 May 2020 13:20:10 +0100 Subject: [PATCH] Fix bug in persist events when dealing with non member types. (#7548) `_is_server_still_joined` will throw if it is given state updates with non-user ID state keys with local user leaves. This is actually rarely a problem since local leaves almost always get persisted by themselves. (I discovered this on a branch that was otherwise broken, so I haven't seen this in the wild) --- changelog.d/7548.bugfix | 1 + synapse/storage/persist_events.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 changelog.d/7548.bugfix diff --git a/changelog.d/7548.bugfix b/changelog.d/7548.bugfix new file mode 100644 index 000000000..1233b3b31 --- /dev/null +++ b/changelog.d/7548.bugfix @@ -0,0 +1 @@ +Fix bug where a local user leaving a room could fail under rare circumstances. diff --git a/synapse/storage/persist_events.py b/synapse/storage/persist_events.py index 41881ea20..12e1ffb9a 100644 --- a/synapse/storage/persist_events.py +++ b/synapse/storage/persist_events.py @@ -740,8 +740,8 @@ class EventsPersistenceStorage(object): # whose state has changed as we've already their new state above. users_to_ignore = [ state_key - for _, state_key in itertools.chain(delta.to_insert, delta.to_delete) - if self.is_mine_id(state_key) + for typ, state_key in itertools.chain(delta.to_insert, delta.to_delete) + if typ == EventTypes.Member and self.is_mine_id(state_key) ] if await self.main_store.is_local_host_in_room_ignoring_users(