summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Teller <D.O.Teller@gmail.com>2022-07-07 10:14:32 +0200
committerGitHub <noreply@github.com>2022-07-07 08:14:32 +0000
commit57f6f59e3eacac61038419639f234e1eb1f230ed (patch)
treeafd52dde73c0e4395a64ffa404a998eaaf600774
parentAdd information on how the Synapse team does reviews. (#13132) (diff)
downloadsynapse-57f6f59e3eacac61038419639f234e1eb1f230ed.tar.xz
Make `_get_state_map_for_room` not break when room state events don't contain an event id. (#13174)
Method `_get_state_map_for_room` seems to break in presence of some ill-formed events in the database. Reimplementing this method to use `get_current_state`, which is more robust to such events.
-rw-r--r--changelog.d/13174.bugfix1
-rw-r--r--synapse/events/third_party_rules.py9
2 files changed, 2 insertions, 8 deletions
diff --git a/changelog.d/13174.bugfix b/changelog.d/13174.bugfix
new file mode 100644
index 0000000000..b17935b93f
--- /dev/null
+++ b/changelog.d/13174.bugfix
@@ -0,0 +1 @@
+Make use of the more robust `get_current_state` in `_get_state_map_for_room` to avoid breakages.
diff --git a/synapse/events/third_party_rules.py b/synapse/events/third_party_rules.py
index 35f3f3690f..72ab696898 100644
--- a/synapse/events/third_party_rules.py
+++ b/synapse/events/third_party_rules.py
@@ -464,14 +464,7 @@ class ThirdPartyEventRules:
         Returns:
             A dict mapping (event type, state key) to state event.
         """
-        state_ids = await self._storage_controllers.state.get_current_state_ids(room_id)
-        room_state_events = await self.store.get_events(state_ids.values())
-
-        state_events = {}
-        for key, event_id in state_ids.items():
-            state_events[key] = room_state_events[event_id]
-
-        return state_events
+        return await self._storage_controllers.state.get_current_state(room_id)
 
     async def on_profile_update(
         self, user_id: str, new_profile: ProfileInfo, by_admin: bool, deactivation: bool