diff options
author | Eric Eastwood <erice@element.io> | 2021-10-05 11:51:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-05 11:51:57 -0500 |
commit | 392863fbf1ee31f8a1997446ab31919a7b6d9a14 (patch) | |
tree | 3ebf2b6ba77da1ce73f5b29d8150121f39b44e77 | |
parent | Merge branch 'master' into develop (diff) | |
download | synapse-392863fbf1ee31f8a1997446ab31919a7b6d9a14.tar.xz |
Fix logic flaw preventing tracking of MSC2716 events in existing room versions (#10962)
We correctly allowed using the MSC2716 batch endpoint for the room creator in existing room versions but accidentally didn't track the events because of a logic flaw. This prevented you from connecting subsequent chunks together because it would throw the unknown batch ID error. We only want to process MSC2716 events when: - The room version supports MSC2716 - Any room where the homeserver has the `msc2716_enabled` experimental feature enabled and the event is from the room creator
-rw-r--r-- | changelog.d/10962.bugfix | 1 | ||||
-rw-r--r-- | synapse/handlers/federation_event.py | 5 | ||||
-rw-r--r-- | synapse/storage/databases/main/events.py | 10 |
3 files changed, 7 insertions, 9 deletions
diff --git a/changelog.d/10962.bugfix b/changelog.d/10962.bugfix new file mode 100644 index 0000000000..9b0760d731 --- /dev/null +++ b/changelog.d/10962.bugfix @@ -0,0 +1 @@ +Fix [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) `/batch_send` endpoint rejecting subsequent batches with unknown batch ID error in existing room versions from the room creator. diff --git a/synapse/handlers/federation_event.py b/synapse/handlers/federation_event.py index 9269cb444d..243be46267 100644 --- a/synapse/handlers/federation_event.py +++ b/synapse/handlers/federation_event.py @@ -1015,9 +1015,8 @@ class FederationEventHandler: room_version = await self._store.get_room_version(marker_event.room_id) create_event = await self._store.get_create_event_for_room(marker_event.room_id) room_creator = create_event.content.get(EventContentFields.ROOM_CREATOR) - if ( - not room_version.msc2716_historical - or not self._config.experimental.msc2716_enabled + if not room_version.msc2716_historical and ( + not self._config.experimental.msc2716_enabled or marker_event.sender != room_creator ): return diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index bc7d213fe2..19f55c19c5 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -1763,9 +1763,8 @@ class PersistEventsStore: retcol="creator", allow_none=True, ) - if ( - not room_version.msc2716_historical - or not self.hs.config.experimental.msc2716_enabled + if not room_version.msc2716_historical and ( + not self.hs.config.experimental.msc2716_enabled or event.sender != room_creator ): return @@ -1825,9 +1824,8 @@ class PersistEventsStore: retcol="creator", allow_none=True, ) - if ( - not room_version.msc2716_historical - or not self.hs.config.experimental.msc2716_enabled + if not room_version.msc2716_historical and ( + not self.hs.config.experimental.msc2716_enabled or event.sender != room_creator ): return |