From 6b1f027b88f90ade4c675678a9b1b486aa6d1f71 Mon Sep 17 00:00:00 2001 From: Jonas Platte Date: Fri, 3 Sep 2021 21:20:48 +0200 Subject: [PATCH] state-res: Raise an error (don't panic) on invalid power-levels event --- crates/ruma-state-res/src/event_auth.rs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/crates/ruma-state-res/src/event_auth.rs b/crates/ruma-state-res/src/event_auth.rs index d650aa00..db294ddc 100644 --- a/crates/ruma-state-res/src/event_auth.rs +++ b/crates/ruma-state-res/src/event_auth.rs @@ -12,7 +12,7 @@ use ruma_events::{ EventType, }; 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}; @@ -561,10 +561,19 @@ where E: Event, F: Fn(&EventType, &str) -> Option>, { - let power_event_state_key = power_event.state_key().expect("power events have state keys"); - let current_state = if let Some(current_state) = - fetch_state(&power_event.event_type(), &power_event_state_key) - { + match power_event.state_key().as_deref() { + Some("") => {} + 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 } else { // If there is no previous m.room.power_levels event in the room, allow