From a047199fb4c0defd6e81f66217698683c418ccd1 Mon Sep 17 00:00:00 2001 From: timedout Date: Tue, 27 Jan 2026 03:07:37 +0000 Subject: [PATCH] perf: Don't handle PDUs for rooms we aren't in --- .../event_handler/handle_incoming_pdu.rs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/service/rooms/event_handler/handle_incoming_pdu.rs b/src/service/rooms/event_handler/handle_incoming_pdu.rs index 4c98bbea..2d12161b 100644 --- a/src/service/rooms/event_handler/handle_incoming_pdu.rs +++ b/src/service/rooms/event_handler/handle_incoming_pdu.rs @@ -4,8 +4,8 @@ use std::{ }; use conduwuit::{ - Err, Event, Result, debug::INFO_SPAN_LEVEL, defer, err, implement, utils::stream::IterStream, - warn, + Err, Event, Result, debug::INFO_SPAN_LEVEL, debug_warn, defer, err, implement, + utils::stream::IterStream, warn, }; use futures::{ FutureExt, TryFutureExt, TryStreamExt, @@ -70,7 +70,7 @@ pub async fn handle_incoming_pdu<'a>( return Err!(Request(TooLarge("PDU is too large"))); } - // 1.1 Check the server is in the room + // 1.1 Check we even know about the room let meta_exists = self.services.metadata.exists(room_id).map(Ok); // 1.2 Check if the room is disabled @@ -114,6 +114,19 @@ pub async fn handle_incoming_pdu<'a>( return Err!(Request(Forbidden("Federation of this room is disabled by this server."))); } + if !self + .services + .state_cache + .server_in_room(self.services.globals.server_name(), room_id) + .await + { + debug_warn!( + %origin, + "Dropping inbound PDU for room we aren't participating in" + ); + return Err!(Request(NotFound("This server is not participating in that room."))); + } + let (incoming_pdu, val) = self .handle_outlier_pdu(origin, create_event, event_id, room_id, value, false) .await?;