From 3ff574af81339bd40b7235c3c5be92c8fe285adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20K=C3=B6sters?= Date: Thu, 3 Feb 2022 11:44:29 +0100 Subject: [PATCH] fix: repair after broken join The bug that caused broken joins was fixed here: https://gitlab.com/famedly/conduit/-/commit/a5f004d7e9c783caf280884d7fd332c7bafa67ce But that commit doesn't repair those joins afterwards because the broken join event is still in the auth chain. This commit will leave out the the member join event from the auth_events in leave->* transitions. Also see https://github.com/matrix-org/matrix-doc/issues/3695 --- src/database/rooms.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/database/rooms.rs b/src/database/rooms.rs index c0cb1ce9..f56e7394 100644 --- a/src/database/rooms.rs +++ b/src/database/rooms.rs @@ -295,6 +295,22 @@ impl Rooms { sauthevents.remove(&shortstatekey).map(|k| (k, event_id)) }) .filter_map(|(k, event_id)| self.get_pdu(&event_id).ok().flatten().map(|pdu| (k, pdu))) + .filter(|(_, pdu)| { + if pdu.kind != EventType::RoomMember { + return true; + } + + #[derive(Deserialize)] + struct ExtractMembership { + membership: MembershipState, + } + + // Leave out auth events where the membership is leave + match serde_json::from_str::(pdu.content.get()) { + Ok(e) => e.membership != MembershipState::Leave, + Err(_) => true, + } + }) .collect()) }