fix: Do not panic on invalid membership event content
This commit is contained in:
parent
dcbacb5b78
commit
77c4f9ff2f
1 changed files with 13 additions and 8 deletions
|
@ -38,7 +38,7 @@ struct GetMembership {
|
||||||
membership: MembershipState,
|
membership: MembershipState,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize, Debug)]
|
||||||
struct RoomMemberContentFields {
|
struct RoomMemberContentFields {
|
||||||
membership: Option<Raw<MembershipState>>,
|
membership: Option<Raw<MembershipState>>,
|
||||||
join_authorised_via_users_server: Option<Raw<OwnedUserId>>,
|
join_authorised_via_users_server: Option<Raw<OwnedUserId>>,
|
||||||
|
@ -149,9 +149,9 @@ where
|
||||||
Incoming: Event + Send + Sync,
|
Incoming: Event + Send + Sync,
|
||||||
{
|
{
|
||||||
debug!(
|
debug!(
|
||||||
"auth_check beginning for {} ({})",
|
event_id = format!("{}", incoming_event.event_id()),
|
||||||
incoming_event.event_id(),
|
event_type = format!("{}", incoming_event.event_type()),
|
||||||
incoming_event.event_type()
|
"auth_check beginning"
|
||||||
);
|
);
|
||||||
|
|
||||||
// [synapse] check that all the events are in the same room as `incoming_event`
|
// [synapse] check that all the events are in the same room as `incoming_event`
|
||||||
|
@ -383,10 +383,15 @@ where
|
||||||
|
|
||||||
let sender_membership_event_content: RoomMemberContentFields =
|
let sender_membership_event_content: RoomMemberContentFields =
|
||||||
from_json_str(sender_member_event.content().get())?;
|
from_json_str(sender_member_event.content().get())?;
|
||||||
let membership_state = sender_membership_event_content
|
let Some(membership_state) = sender_membership_event_content.membership else {
|
||||||
.membership
|
warn!(
|
||||||
.expect("we should test before that this field exists")
|
sender_membership_event_content = format!("{sender_membership_event_content:?}"),
|
||||||
.deserialize()?;
|
event_id = format!("{}", incoming_event.event_id()),
|
||||||
|
"Sender membership event content missing membership field"
|
||||||
|
);
|
||||||
|
return Err(Error::InvalidPdu("Missing membership field".to_owned()));
|
||||||
|
};
|
||||||
|
let membership_state = membership_state.deserialize()?;
|
||||||
|
|
||||||
if !matches!(membership_state, MembershipState::Join) {
|
if !matches!(membership_state, MembershipState::Join) {
|
||||||
warn!("sender's membership is not join");
|
warn!("sender's membership is not join");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue