From 23caef31bc0a8acc190e954f2cff7e36f15ce7a8 Mon Sep 17 00:00:00 2001 From: Kegan Dougal <7190048+kegsay@users.noreply.github.com> Date: Wed, 8 Apr 2026 16:59:39 +0200 Subject: [PATCH] Ensure state DAG rooms do not federate - /createRoom requests forcibly set m.federate=false - /send_join requests forcibly bail out for state DAG rooms. --- synapse/federation/federation_client.py | 5 +++++ synapse/handlers/room.py | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/synapse/federation/federation_client.py b/synapse/federation/federation_client.py index 55151ca549..78a1900c73 100644 --- a/synapse/federation/federation_client.py +++ b/synapse/federation/federation_client.py @@ -1108,6 +1108,11 @@ class FederationClient(FederationBase): SynapseError: if the chosen remote server returns a 300/400 code, or no servers successfully handle the request. """ + # See related restriction in /createRoom requests in handlers/room.py + if room_version.msc4242_state_dags: + raise UnsupportedRoomVersionError( + "Homeserver does not support this room version over federation" + ) async def send_request(destination: str) -> SendJoinResult: response = await self._do_send_join( diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py index 69fc49d8a8..cec5421d3b 100644 --- a/synapse/handlers/room.py +++ b/synapse/handlers/room.py @@ -1237,6 +1237,10 @@ class RoomCreationHandler: creation_content = config.get("creation_content", {}) # override any attempt to set room versions via the creation_content creation_content["room_version"] = room_version.identifier + # We do not currently support federating state DAG rooms. + # See related restriction in /send_join requests in federation_client.py. + if room_version.msc4242_state_dags: + creation_content[EventContentFields.FEDERATE] = False # trusted private chats have the invited users marked as additional creators if (