state-res: Raise an error (don't panic) on invalid power-levels event

This commit is contained in:
Jonas Platte 2021-09-03 21:20:48 +02:00
parent 40f99cb364
commit 6b1f027b88
No known key found for this signature in database
GPG Key ID: CC154DE0E30B7C67

View File

@ -12,7 +12,7 @@ use ruma_events::{
EventType, EventType,
}; };
use ruma_identifiers::{RoomVersionId, UserId}; use ruma_identifiers::{RoomVersionId, UserId};
use tracing::{debug, info, warn}; use tracing::{debug, error, info, warn};
use crate::{room_version::RoomVersion, Error, Event, Result, StateMap}; use crate::{room_version::RoomVersion, Error, Event, Result, StateMap};
@ -561,10 +561,19 @@ where
E: Event, E: Event,
F: Fn(&EventType, &str) -> Option<Arc<E>>, F: Fn(&EventType, &str) -> Option<Arc<E>>,
{ {
let power_event_state_key = power_event.state_key().expect("power events have state keys"); match power_event.state_key().as_deref() {
let current_state = if let Some(current_state) = Some("") => {}
fetch_state(&power_event.event_type(), &power_event_state_key) Some(key) => {
{ error!("m.room.power_levels event has non-empty state key: {}", key);
return None;
}
None => {
error!("check_power_levels requires an m.room.power_levels *state* event argument");
return None;
}
}
let current_state = if let Some(current_state) = fetch_state(&power_event.event_type(), "") {
current_state current_state
} else { } else {
// If there is no previous m.room.power_levels event in the room, allow // If there is no previous m.room.power_levels event in the room, allow