diff options
author | Patrick Cloke <patrickc@matrix.org> | 2023-04-07 10:17:21 -0400 |
---|---|---|
committer | Patrick Cloke <patrickc@matrix.org> | 2023-07-17 11:05:43 -0400 |
commit | c02f1153069d6abae931e46d2351c53ecc8b185a (patch) | |
tree | 2ded549b33dd30e9cb50ae5c63e68f690efa581d | |
parent | Remove references to m.room.hub events. (diff) | |
download | synapse-c02f1153069d6abae931e46d2351c53ecc8b185a.tar.xz |
Linearized Matrix events do not have a depth.
-rw-r--r-- | synapse/events/__init__.py | 3 | ||||
-rw-r--r-- | synapse/events/utils.py | 3 | ||||
-rw-r--r-- | synapse/federation/federation_base.py | 25 | ||||
-rw-r--r-- | synapse/handlers/federation.py | 4 |
4 files changed, 23 insertions, 12 deletions
diff --git a/synapse/events/__init__.py b/synapse/events/__init__.py index aa48cd2236..d628abc0a6 100644 --- a/synapse/events/__init__.py +++ b/synapse/events/__init__.py @@ -605,6 +605,9 @@ class FrozenLinearizedEvent(FrozenEventV3): format_version = EventFormatVersions.LINEARIZED + # TODO(LM): Do we re-calculate depth at some point? + depth = 0 # type: ignore[assignment] + @property def pdu_domain(self) -> str: """The domain which added this event to the DAG. diff --git a/synapse/events/utils.py b/synapse/events/utils.py index 4f6f075290..ff172d66b4 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py @@ -103,7 +103,6 @@ def prune_event_dict(room_version: RoomVersion, event_dict: JsonDict) -> JsonDic "content", "type", "state_key", - "depth", "prev_events", "auth_events", "origin_server_ts", @@ -115,6 +114,8 @@ def prune_event_dict(room_version: RoomVersion, event_dict: JsonDict) -> JsonDic # The hub server should not be redacted for linear matrix. if room_version.linearized_matrix: allowed_keys.append("hub_server") + else: + allowed_keys.append("depth") # Room versions before MSC3989 kept the origin field. if not room_version.msc3989_redaction_rules: diff --git a/synapse/federation/federation_base.py b/synapse/federation/federation_base.py index 50213a8237..a0c5048efc 100644 --- a/synapse/federation/federation_base.py +++ b/synapse/federation/federation_base.py @@ -295,21 +295,26 @@ def event_from_pdu_json(pdu_json: JsonDict, room_version: RoomVersion) -> EventB """ # we could probably enforce a bunch of other fields here (room_id, sender, # origin, etc etc) - assert_params_in_dict(pdu_json, ("type", "depth")) + if room_version.event_format == EventFormatVersions.LINEARIZED: + assert_params_in_dict(pdu_json, ("type",)) + else: + assert_params_in_dict(pdu_json, ("type", "depth")) + + depth = pdu_json["depth"] + if type(depth) is not int: + raise SynapseError( + 400, "Depth %r not an integer" % (depth,), Codes.BAD_JSON + ) + + if depth < 0: + raise SynapseError(400, "Depth too small", Codes.BAD_JSON) + elif depth > MAX_DEPTH: + raise SynapseError(400, "Depth too large", Codes.BAD_JSON) # Strip any unauthorized values from "unsigned" if they exist if "unsigned" in pdu_json: _strip_unsigned_values(pdu_json) - depth = pdu_json["depth"] - if type(depth) is not int: - raise SynapseError(400, "Depth %r not an intger" % (depth,), Codes.BAD_JSON) - - if depth < 0: - raise SynapseError(400, "Depth too small", Codes.BAD_JSON) - elif depth > MAX_DEPTH: - raise SynapseError(400, "Depth too large", Codes.BAD_JSON) - # Validate that the JSON conforms to the specification. if room_version.strict_canonicaljson: validate_canonicaljson(pdu_json) diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py index cc5ed97730..d90a14788d 100644 --- a/synapse/handlers/federation.py +++ b/synapse/handlers/federation.py @@ -662,7 +662,9 @@ class FederationHandler: origin = ret.origin state = ret.state auth_chain = ret.auth_chain - auth_chain.sort(key=lambda e: e.depth) + # TODO(LM) Assume the auth chain is reasonable ordered. + if not room_version_obj.linearized_matrix: + auth_chain.sort(key=lambda e: e.depth) logger.debug("do_invite_join auth_chain: %s", auth_chain) logger.debug("do_invite_join state: %s", state) |