From 28f258fc8c14bd57b50626cb85f809fbe86643ea Mon Sep 17 00:00:00 2001 From: nexy7574 Date: Thu, 9 Oct 2025 00:44:20 +0100 Subject: [PATCH] fix: Incorrect interpretation of 5.5.4 --- src/core/matrix/state_res/event_auth.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/core/matrix/state_res/event_auth.rs b/src/core/matrix/state_res/event_auth.rs index e16cce77..c9c2fba3 100644 --- a/src/core/matrix/state_res/event_auth.rs +++ b/src/core/matrix/state_res/event_auth.rs @@ -1011,7 +1011,7 @@ where }, | MembershipState::Leave => { let can_unban = if target_user_current_membership == MembershipState::Ban { - sender_creator || sender_power.filter(|&p| p < &power_levels.ban).is_some() + sender_creator || sender_power.filter(|&p| p >= &power_levels.ban).is_some() } else { true }; @@ -1019,7 +1019,11 @@ where target_user_current_membership, MembershipState::Ban | MembershipState::Leave ) { - sender_creator || sender_power.filter(|&p| p < &power_levels.kick).is_some() + sender_creator + || (sender_power.filter(|&p| p < &power_levels.kick).is_some() + && sender_power + .filter(|&p| p > target_power.unwrap_or(&int!(0))) + .is_some()) } else { true }; @@ -1049,7 +1053,7 @@ where "sender cannot kick another user as they are not joined to the room", ); false - } else if !can_unban { + } else if !(can_unban && can_kick) { // If the target is banned, only a room creator or someone with ban power // level can unban them warn!(