Unsafe, untested, and potentially overeager PDU sanity checks

This commit is contained in:
nexy7574 2025-06-11 00:45:57 +01:00 committed by Jacob Taylor
parent b7e472a838
commit f91bc71eba
2 changed files with 19 additions and 3 deletions

View file

@ -264,9 +264,11 @@ where
if room_id_server_name != room_create_event.sender().server_name() { if room_id_server_name != room_create_event.sender().server_name() {
warn!( warn!(
"servername of room ID origin ({}) does not match servername of m.room.create sender ({})", "servername of room ID origin ({}) does not match servername of m.room.create \
sender ({})",
room_id_server_name, room_id_server_name,
room_create_event.sender().server_name()); room_create_event.sender().server_name()
);
return Ok(false); return Ok(false);
} }

View file

@ -698,6 +698,20 @@ impl Service {
.await .await
.saturating_add(uint!(1)); .saturating_add(uint!(1));
if state_key.is_none() {
if prev_events.is_empty() {
warn!("Timeline event had zero prev_events, something broke.");
return Err!(Request(Unknown("Timeline event had zero prev_events.")));
}
if depth.le(&uint!(2)) {
warn!(
"Had unsafe depth of {depth} in {room_id} when creating non-state event. \
Bad!"
);
return Err!(Request(Unknown("Unsafe depth for non-state event.")));
}
};
let mut unsigned = unsigned.unwrap_or_default(); let mut unsigned = unsigned.unwrap_or_default();
if let Some(state_key) = &state_key { if let Some(state_key) = &state_key {