From 6f76b0a593fdf96ad82d26bf5cd0b109f3e5f436 Mon Sep 17 00:00:00 2001 From: Ginger Date: Sun, 5 Jul 2026 10:51:36 -0400 Subject: [PATCH] fix: Don't bail out when changing profile data if membership cache is wrong --- src/service/users/profile.rs | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/service/users/profile.rs b/src/service/users/profile.rs index 2ea869312..e10667cbf 100644 --- a/src/service/users/profile.rs +++ b/src/service/users/profile.rs @@ -4,6 +4,7 @@ Err, Result, pdu::PartialPdu, utils::{ReadyExt, stream::TryIgnore, to_canonical_object}, + warn, }; use database::{Deserialized, Ignore, Interfix, Json}; use futures::{Stream, StreamExt}; @@ -115,18 +116,32 @@ pub async fn set_profile_field( while let Some(room_id) = all_joined_rooms.next().await { // TODO: this clobbers any custom fields on the event content - let mut current_membership = self + let mut current_membership = match self .services .state_accessor .get_member(&room_id, user_id) .await - .expect("should be able to fetch membership event for joined room"); - - assert_eq!( - current_membership.membership, - MembershipState::Join, - "user should be joined" - ); + { + | Ok(current_membership) + if current_membership.membership == MembershipState::Join => + current_membership, + | Ok(current_membership) => { + warn!( + ?user_id, + ?room_id, + "User is not joined in joined room: {current_membership:?}" + ); + continue; + }, + | Err(err) => { + warn!( + ?user_id, + ?room_id, + "Could not load membership event for joined room: {err}" + ); + continue; + }, + }; // If `propagate_to` is `unchanged`, and the current value of the field we're // updating was changed from its global value in this room, skip it.