diff options
author | Erik Johnston <erik@matrix.org> | 2018-11-08 12:11:20 +0000 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2018-11-08 12:11:20 +0000 |
commit | 9417986f7799bdcd609db16c2c964af09d9fe9b5 (patch) | |
tree | d0e4e8b8c3f7ea6c0396132cc98dcea7bd15dbc3 | |
parent | Port hash_password to Python 3 (#4161) (diff) | |
download | synapse-9417986f7799bdcd609db16c2c964af09d9fe9b5.tar.xz |
Drop PDUs of unknown rooms
When we receive events over federation we will need to know the room version to be able to correctly handle them, e.g. once we start changing event formats. Currently, we attempt to handle events in unknown rooms.
-rw-r--r-- | synapse/federation/federation_server.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/synapse/federation/federation_server.py b/synapse/federation/federation_server.py index fa2cc550e2..38949fb49a 100644 --- a/synapse/federation/federation_server.py +++ b/synapse/federation/federation_server.py @@ -162,8 +162,30 @@ class FederationServer(FederationBase): p["age_ts"] = request_time - int(p["age"]) del p["age"] + # We try and pull out an event ID so that if latter checks fail we + # can log something sensible. We don't mandate an event ID here in + # case future event formats get rid of the key. + possible_event_id = p.get("event_id", "<Unknown>") + + # Now we get the room ID so that we can check that we know the + # version of the room. + room_id = p.get("room_id") + if not room_id: + logger.info( + "Ignoring PDU as does not have a room_id. Event ID: %s", + possible_event_id, + ) + continue + + try: + # In future we will actually use the room version to parse the + # PDU into an event. + yield self.store.get_room_version(room_id) + except NotFoundError: + logger.info("Ignoring PUD for unknown room_id: %s", room_id) + continue + event = event_from_pdu_json(p) - room_id = event.room_id pdus_by_room.setdefault(room_id, []).append(event) pdu_results = {} |