Skip to content
Snippets Groups Projects
Unverified Commit 41461fd4 authored by Mathieu Velten's avatar Mathieu Velten Committed by GitHub
Browse files

typing: check origin server of typing event against room's servers (#13830)



This is also using the partial state approximation if needed so we do
not block here during a fast join.

Signed-off-by: default avatarMathieu Velten <mathieuv@matrix.org>
Co-authored-by: default avatarSean Quah <8349537+squahtx@users.noreply.github.com>
parent 6b4593a8
No related branches found
No related tags found
No related merge requests found
Fix a long-standing bug where typing events would be accepted from remote servers not present in a room. Also fix a bug where incoming typing events would cause other incoming events to get stuck during a fast join.
...@@ -362,11 +362,14 @@ class TypingWriterHandler(FollowerTypingHandler): ...@@ -362,11 +362,14 @@ class TypingWriterHandler(FollowerTypingHandler):
) )
return return
domains = await self._storage_controllers.state.get_current_hosts_in_room( # Let's check that the origin server is in the room before accepting the typing
# event. We don't want to block waiting on a partial state so take an
# approximation if needed.
domains = await self._storage_controllers.state.get_current_hosts_in_room_or_partial_state_approximation(
room_id room_id
) )
if self.server_name in domains: if user.domain in domains:
logger.info("Got typing update from %s: %r", user_id, content) logger.info("Got typing update from %s: %r", user_id, content)
now = self.clock.time_msec() now = self.clock.time_msec()
self._member_typing_until[member] = now + FEDERATION_TIMEOUT self._member_typing_until[member] = now + FEDERATION_TIMEOUT
......
...@@ -138,6 +138,10 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase): ...@@ -138,6 +138,10 @@ class TypingNotificationsTestCase(unittest.HomeserverTestCase):
get_current_hosts_in_room get_current_hosts_in_room
) )
hs.get_storage_controllers().state.get_current_hosts_in_room_or_partial_state_approximation = (
get_current_hosts_in_room
)
async def get_users_in_room(room_id: str): async def get_users_in_room(room_id: str):
return {str(u) for u in self.room_members} return {str(u) for u in self.room_members}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment