From 81cd677b4e984d22ada504fa4121e0da3080bcce Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Wed, 12 Jun 2024 00:17:03 -0400 Subject: [PATCH] fix dropped events in search The previous code would drop some events entirely if any events between `skip` and `skip + limit` were not visible to the user. This would cause the set of events skipped by the `skip(skip)` method to extend past `skip` in the raw result set, because `skip(skip)` was being called *after* filtering out invisible events. This bug will become much more severe with a full filtering implementation, because it will be more likely for events to be filtered out. Currently, it is only possible to trigger with rooms that have history visibility set to "invited" or "joined". Signed-off-by: strawberry --- src/api/client/search.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/client/search.rs b/src/api/client/search.rs index de98ec4e..b9bf9b62 100644 --- a/src/api/client/search.rs +++ b/src/api/client/search.rs @@ -133,6 +133,7 @@ pub(crate) async fn search_events_route(body: Ruma) let results: Vec<_> = results .iter() + .skip(skip) .filter_map(|result| { services() .rooms @@ -162,7 +163,6 @@ pub(crate) async fn search_events_route(body: Ruma) }) }) .filter_map(Result::ok) - .skip(skip) .take(limit) .collect();