fix: Don't allow set_unsigned to panic

While an error in this function is probably bad, detonating a metric tonne of TNT on the call tree is probably worse
This commit is contained in:
timedout committed 2026-09-27 17:32:47 +01:00
1 parent 90793eaaf4
commit 4812837d13
12 files changed
+73 -67

No files matched your search

+9 -12
View File
@@ -1,6 +1,7 @@
use axum::extract::State;
use conduwuit::{
Err, Event, Result, at, debug_warn, err, ref_at,
result::LogErr,
utils::{
IterStream,
future::TryExtExt,
@@ -103,12 +104,10 @@ pub(crate) async fn get_context_route(
.timeline
.get_unsigned_context(&pdu.1, Some(sender_user))
.await;
pdu.1.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
);
pdu.1
.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because)
.log_err()
.ok();
if let Err(e) = services
.rooms
.pdu_metadata
@@ -136,12 +135,10 @@ pub(crate) async fn get_context_route(
.timeline
.get_unsigned_context(&pdu.1, Some(sender_user))
.await;
pdu.1.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
);
pdu.1
.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because)
.log_err()
.ok();
if let Err(e) = services
.rooms
.pdu_metadata
+4 -6
View File
@@ -145,12 +145,10 @@ pub(crate) async fn get_message_events_route(
.timeline
.get_unsigned_context(&pdu.1, Some(sender_user))
.await;
pdu.1.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
);
pdu.1
.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because)
.log_err()
.ok();
if let Err(e) = services
.rooms
.pdu_metadata
+1 -1
View File
@@ -63,7 +63,7 @@ pub(crate) async fn get_room_event_route(
.timeline
.get_unsigned_context(&event, Some(sender_user))
.await;
event.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because);
event.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because)?;
Ok(get_room_event::v3::Response::new(event.into_format()))
}
+5 -6
View File
@@ -1,6 +1,7 @@
use axum::extract::State;
use conduwuit::{
Err, Event, Result, at, debug_warn,
result::LogErr,
utils::{BoolExt, stream::TryTools},
};
use futures::{FutureExt, TryStreamExt, future::try_join4};
@@ -58,12 +59,10 @@ pub(crate) async fn room_initial_sync_route(
.timeline
.get_unsigned_context(&pdu.1, Some(sender_user))
.await;
pdu.1.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
);
pdu.1
.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because)
.log_err()
.ok();
if let Err(e) = services
.rooms
.pdu_metadata
+21 -13
View File
@@ -6,7 +6,9 @@ use std::collections::VecDeque;
use conduwuit::{
Event, PduCount, Result, debug_warn, err,
matrix::pdu::PduEvent,
ref_at, trace,
ref_at,
result::LogErr,
trace,
utils::stream::{BroadbandExt, ReadyExt, TryIgnore, WidebandExt},
};
use conduwuit_service::Services;
@@ -89,12 +91,15 @@ async fn load_timeline(
.timeline
.get_unsigned_context(&pdu.1, Some(sender_user))
.await;
pdu.1.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
);
pdu.1
.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
)
.log_err()
.ok();
Some(pdu)
})
.then(async move |mut pdu| {
@@ -124,12 +129,15 @@ async fn load_timeline(
.timeline
.get_unsigned_context(&pdu.1, Some(sender_user))
.await;
pdu.1.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
);
pdu.1
.set_unsigned(
ctx.user_id,
ctx.membership,
ctx.prev_content,
ctx.redacted_because,
)
.log_err()
.ok();
Some(pdu)
})
.then(async move |mut pdu| {
+4 -1
View File
@@ -6,6 +6,7 @@ use conduwuit::{
Event,
pdu::{PduCount, PduEvent, sticky},
},
result::LogErr,
trace,
utils::{
BoolExt, IterStream, ReadyExt, TryFutureExtExt,
@@ -327,7 +328,9 @@ async fn build_sticky_events(
.timeline
.get_unsigned_context(&pdu, Some(sync_context.syncing_user))
.await;
pdu.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because);
pdu.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because)
.log_err()
.ok();
events.push(Event::into_format(pdu));
}
+4 -1
View File
@@ -11,6 +11,7 @@ use conduwuit::{
Event, TypeStateKey,
pdu::{PduCount, PduEvent, sticky},
},
result::LogErr,
trace,
utils::{
BoolExt, FutureBoolExt, IterStream, ReadyExt, TryFutureExtExt,
@@ -1217,7 +1218,9 @@ async fn push_sticky_event(
.timeline
.get_unsigned_context(&pdu, Some(sender_user))
.await;
pdu.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because);
pdu.set_unsigned(ctx.user_id, ctx.membership, ctx.prev_content, ctx.redacted_because)
.log_err()
.ok();
response
.rooms
.entry(room_id)