From 9b732e1895713f7de71ae707ed40bd0cedfcea36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Fri, 22 Sep 2023 10:32:17 +0200 Subject: [PATCH] base: Ensure room name is not empty MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruma used to handle this during deserialization when the field was an Option. Especially meaningful when computing the room name, where an empty string means the name is not set. Signed-off-by: Kévin Commaille --- crates/matrix-sdk-base/src/rooms/normal.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/matrix-sdk-base/src/rooms/normal.rs b/crates/matrix-sdk-base/src/rooms/normal.rs index d1be0396b..d0159ea0d 100644 --- a/crates/matrix-sdk-base/src/rooms/normal.rs +++ b/crates/matrix-sdk-base/src/rooms/normal.rs @@ -350,6 +350,8 @@ impl Room { } /// Get the `m.room.name` of this room. + /// + /// The returned string is guaranteed not to be empty. pub fn name(&self) -> Option { self.inner.read().name().map(ToOwned::to_owned) } @@ -1022,7 +1024,8 @@ impl RoomInfo { } fn name(&self) -> Option<&str> { - Some(&self.base_info.name.as_ref()?.as_original()?.content.name) + let name = &self.base_info.name.as_ref()?.as_original()?.content.name; + (!name.is_empty()).then_some(name) } fn tombstone(&self) -> Option<&RoomTombstoneEventContent> { @@ -1356,6 +1359,19 @@ mod tests { assert_eq!(room.display_name().await.unwrap(), DisplayName::Empty); } + #[async_test] + async fn display_name_for_invited_room_is_empty_if_room_name_empty() { + let (_, room) = make_room(RoomState::Invited); + + let room_name = MinimalStateEvent::Original(OriginalMinimalStateEvent { + content: RoomNameEventContent::new(String::new()), + event_id: None, + }); + room.inner.update(|info| info.base_info.name = Some(room_name)); + + assert_eq!(room.display_name().await.unwrap(), DisplayName::Empty); + } + #[async_test] async fn display_name_for_invited_room_uses_canonical_alias_if_available() { let (_, room) = make_room(RoomState::Invited);