summary refs log tree commit diff
diff options
context:
space:
mode:
authorreivilibre <oliverw@matrix.org>2022-12-07 11:19:43 +0000
committerGitHub <noreply@github.com>2022-12-07 11:19:43 +0000
commitcf1059d045640485a5a0b1e3d945b796b0e6f228 (patch)
treee0e408463d49bcc58865127b354aa826c2a701e6
parentFaster remote room joins: unblock tasks waiting for full room state when the ... (diff)
downloadsynapse-cf1059d045640485a5a0b1e3d945b796b0e6f228.tar.xz
Fix a long-standing bug where the user directory would return 1 more row than requested. (#14631)
-rw-r--r--changelog.d/14631.bugfix1
-rw-r--r--synapse/rest/client/user_directory.py4
-rw-r--r--synapse/storage/databases/main/user_directory.py2
-rw-r--r--tests/storage/test_user_directory.py6
4 files changed, 10 insertions, 3 deletions
diff --git a/changelog.d/14631.bugfix b/changelog.d/14631.bugfix
new file mode 100644

index 0000000000..c5376bab9f --- /dev/null +++ b/changelog.d/14631.bugfix
@@ -0,0 +1 @@ +Fix a long-standing bug where the user directory would return 1 more row than requested. \ No newline at end of file diff --git a/synapse/rest/client/user_directory.py b/synapse/rest/client/user_directory.py
index 116c982ce6..4670fad608 100644 --- a/synapse/rest/client/user_directory.py +++ b/synapse/rest/client/user_directory.py
@@ -63,8 +63,8 @@ class UserDirectorySearchRestServlet(RestServlet): body = parse_json_object_from_request(request) - limit = body.get("limit", 10) - limit = min(limit, 50) + limit = int(body.get("limit", 10)) + limit = max(min(limit, 50), 0) try: search_term = body["search_term"] diff --git a/synapse/storage/databases/main/user_directory.py b/synapse/storage/databases/main/user_directory.py
index 044435deab..af9952f513 100644 --- a/synapse/storage/databases/main/user_directory.py +++ b/synapse/storage/databases/main/user_directory.py
@@ -886,7 +886,7 @@ class UserDirectoryStore(UserDirectoryBackgroundUpdateStore): limited = len(results) > limit - return {"limited": limited, "results": results} + return {"limited": limited, "results": results[0:limit]} def _parse_query_sqlite(search_term: str) -> str: diff --git a/tests/storage/test_user_directory.py b/tests/storage/test_user_directory.py
index 5b60cf5285..88c7d5fec0 100644 --- a/tests/storage/test_user_directory.py +++ b/tests/storage/test_user_directory.py
@@ -449,6 +449,12 @@ class UserDirectoryStoreTestCase(HomeserverTestCase): ) @override_config({"user_directory": {"search_all_users": True}}) + def test_search_user_limit_correct(self) -> None: + r = self.get_success(self.store.search_user_dir(ALICE, "bob", 1)) + self.assertTrue(r["limited"]) + self.assertEqual(1, len(r["results"])) + + @override_config({"user_directory": {"search_all_users": True}}) def test_search_user_dir_stop_words(self) -> None: """Tests that a user can look up another user by searching for the start if its display name even if that name happens to be a common English word that would