|
@@ -1664,11 +1664,21 @@ class FederationEventHandler:
|
|
|
"""Checks if we should soft fail the event; if so, marks the event as
|
|
|
such.
|
|
|
|
|
|
+ Does nothing for events in rooms with partial state, since we may not have an
|
|
|
+ accurate membership event for the sender in the current state.
|
|
|
+
|
|
|
Args:
|
|
|
event
|
|
|
state_ids: The state at the event if we don't have all the event's prev events
|
|
|
origin: The host the event originates from.
|
|
|
"""
|
|
|
+ if await self._store.is_partial_state_room(event.room_id):
|
|
|
+ # We might not know the sender's membership in the current state, so don't
|
|
|
+ # soft fail anything. Even if we do have a membership for the sender in the
|
|
|
+ # current state, it may have been derived from state resolution between
|
|
|
+ # partial and full state and may not be accurate.
|
|
|
+ return
|
|
|
+
|
|
|
extrem_ids_list = await self._store.get_latest_event_ids_in_room(event.room_id)
|
|
|
extrem_ids = set(extrem_ids_list)
|
|
|
prev_event_ids = set(event.prev_event_ids())
|