diff --git a/synapse/federation/sender/per_destination_queue.py b/synapse/federation/sender/per_destination_queue.py
index 18a6254c71..29345c05b1 100644
--- a/synapse/federation/sender/per_destination_queue.py
+++ b/synapse/federation/sender/per_destination_queue.py
@@ -548,6 +548,7 @@ class PerDestinationQueue:
new_pdus,
redact=False,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
# If we've filtered out all the extremities, fall back to
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index f3e7b4ef17..26883b8ca4 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -401,6 +401,7 @@ class FederationHandler:
events_to_check,
redact=False,
filter_out_erased_senders=False,
+ filter_out_partial_state_rooms=False,
)
if filtered_extremities:
extremities_to_request.append(bp.event_id)
@@ -1337,6 +1338,7 @@ class FederationHandler:
events,
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
return events
@@ -1373,6 +1375,7 @@ class FederationHandler:
[event],
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
event = events[0]
return event
@@ -1406,6 +1409,7 @@ class FederationHandler:
missing_events,
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
return missing_events
diff --git a/synapse/visibility.py b/synapse/visibility.py
index 46adaa0da1..d943ead6c5 100644
--- a/synapse/visibility.py
+++ b/synapse/visibility.py
@@ -579,6 +579,7 @@ async def filter_events_for_server(
*,
redact: bool,
filter_out_erased_senders: bool,
+ filter_out_partial_state_rooms: bool,
) -> List[EventBase]:
"""Filter a list of events based on whether the target server is allowed to
see them.
@@ -604,7 +605,8 @@ async def filter_events_for_server(
filter_out_erased_senders: If true, also filter out events whose sender has been
erased. This is used e.g. during pagination to decide whether to
backfill or not.
-
+ filter_out_partial_state_rooms: If True, also filter out events in partial state
+ rooms.
Returns
The filtered events.
"""
@@ -654,7 +656,7 @@ async def filter_events_for_server(
# this check but would base the filtering on an outdated view of the membership events.
partial_state_invisible_event_ids: Set[str] = set()
- if filter_out_erased_senders:
+ if filter_out_partial_state_rooms:
for e in events:
sender_domain = get_domain_from_id(e.sender)
if (
diff --git a/tests/test_visibility.py b/tests/test_visibility.py
index 569a01a417..f758232d08 100644
--- a/tests/test_visibility.py
+++ b/tests/test_visibility.py
@@ -69,6 +69,7 @@ class FilterEventsForServerTestCase(unittest.HomeserverTestCase):
events_to_filter,
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
)
@@ -96,6 +97,7 @@ class FilterEventsForServerTestCase(unittest.HomeserverTestCase):
[outlier],
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
),
[outlier],
@@ -112,6 +114,7 @@ class FilterEventsForServerTestCase(unittest.HomeserverTestCase):
[outlier, evt],
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
)
self.assertEqual(len(filtered), 2, f"expected 2 results, got: {filtered}")
@@ -129,6 +132,7 @@ class FilterEventsForServerTestCase(unittest.HomeserverTestCase):
[outlier, evt],
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
)
self.assertEqual(filtered[0], outlier)
@@ -169,6 +173,7 @@ class FilterEventsForServerTestCase(unittest.HomeserverTestCase):
events_to_filter,
redact=True,
filter_out_erased_senders=True,
+ filter_out_partial_state_rooms=True,
)
)
|