diff --git a/src/event_auth.rs b/src/event_auth.rs index 0f6b6942..a2e62e34 100644 --- a/src/event_auth.rs +++ b/src/event_auth.rs @@ -336,6 +336,7 @@ pub fn valid_membership_change( let key = (EventType::RoomMember, target_user_id.to_string()); let current = auth_events.get(&key); + let current_membership = current.map_or(Ok::<_, Error>(member::MembershipState::Leave), |pdu| { Ok(serde_json::from_value::( diff --git a/src/lib.rs b/src/lib.rs index ac621b1b..ab4f2681 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -510,7 +510,15 @@ impl StateResolution { for aid in &event.auth_events() { if let Ok(ev) = StateResolution::get_or_load_event(room_id, &aid, event_map) { // TODO synapse check "rejected_reason", I'm guessing this is redacted_because in ruma ?? - auth_events.insert((ev.kind(), state_key.clone()), ev); + auth_events.insert( + ( + ev.kind(), + ev.state_key().ok_or_else(|| { + Error::InvalidPdu("State event had no state key".to_owned()) + })?, + ), + ev, + ); } else { log::warn!("auth event id for {} is missing {}", aid, event_id); }