From 67d8d72506a800e582a8062c011c3316fc5cef5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=A9=C5=BAera?= Date: Thu, 26 Mar 2026 18:52:03 -0500 Subject: [PATCH] fix: return 404 when joining non-existent room Fixes #1443. --- changelog.d/1579.bugfix | 1 + src/api/client/membership/join.rs | 9 +++++++++ src/core/error/err.rs | 8 ++++++++ 3 files changed, 18 insertions(+) create mode 100644 changelog.d/1579.bugfix diff --git a/changelog.d/1579.bugfix b/changelog.d/1579.bugfix new file mode 100644 index 000000000..5160a2a6e --- /dev/null +++ b/changelog.d/1579.bugfix @@ -0,0 +1 @@ +Fixed error 500 when joining non-existent rooms. Contributed by @ezera. diff --git a/src/api/client/membership/join.rs b/src/api/client/membership/join.rs index cbb825068..4c3a53d02 100644 --- a/src/api/client/membership/join.rs +++ b/src/api/client/membership/join.rs @@ -785,6 +785,15 @@ async fn join_room_by_id_helper_local( }; if servers.is_empty() || servers.len() == 1 && services.globals.server_is_ours(&servers[0]) { + if !services.rooms.metadata.exists(room_id).await { + return Err!(Request( + Unknown( + "Room was not found locally and no servers were found to help us discover it" + ), + NOT_FOUND + )); + } + return Err(error); } diff --git a/src/core/error/err.rs b/src/core/error/err.rs index 314e03f3a..39f6e33fe 100644 --- a/src/core/error/err.rs +++ b/src/core/error/err.rs @@ -77,6 +77,14 @@ macro_rules! err { ) }; + (Request($variant:ident($($args:tt)+), $status_code:ident)) => { + $crate::error::Error::Request( + $crate::ruma::api::client::error::ErrorKind::$variant, + $crate::format_maybe!($($args)+), + $crate::http::StatusCode::$status_code, + ) + }; + (Config($item:literal, $($args:tt)+)) => {{ let mut buf = String::new(); $crate::error::Error::Config($item, $crate::err_log!(buf, error, config = %$item, $($args)+))