Return an error when signing an event fails
Prevents the server from crashing/become unresponsive when overly long
messages are sent
@@ -1938,13 +1938,25 @@ impl Rooms {
CanonicalJsonValue::String(db.globals.server_name().as_ref().to_owned()),
);
- ruma::signatures::hash_and_sign_event(
+ match ruma::signatures::hash_and_sign_event(
db.globals.server_name().as_str(),
db.globals.keypair(),
&mut pdu_json,
&room_version_id,
- )
- .expect("event is valid, we just created it");
+ ) {
+ Ok(_) => {}
+ Err(e) => {
+ return match e {
+ ruma::signatures::Error::PduSize => {
+ Err(Error::BadRequest(ErrorKind::TooLarge, "Message is to long"))
+ }
+ _ => Err(Error::BadRequest(
+ ErrorKind::Unknown,
+ "Signing event failed",
+ )),
+ }
+ }
+ }
// Generate event id
pdu.event_id = EventId::parse_arc(format!(
