From e58c2972fb0ae533ccbc9b52c5c8e8ac1a01bb95 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 18 May 2026 09:48:08 +0100 Subject: [PATCH] Correctly handle failing to parse event dict from DB Now that we do a bit more validadtion of events, it's possible that an event persisted in the database may now not pass validation. This shouldn't happen, but let's handle it correctly by logging and returning that we couldn't find the event. This is the same as what we do if we can't parse the JSON. --- synapse/storage/databases/main/events_worker.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/synapse/storage/databases/main/events_worker.py b/synapse/storage/databases/main/events_worker.py index e68ad34d5b..c041ffb70b 100644 --- a/synapse/storage/databases/main/events_worker.py +++ b/synapse/storage/databases/main/events_worker.py @@ -1516,12 +1516,17 @@ class EventsWorkerStore(SQLBaseStore): ) continue - original_ev = make_event_from_dict( - event_dict=d, - room_version=room_version, - internal_metadata_dict=internal_metadata, - rejected_reason=rejected_reason, - ) + try: + original_ev = make_event_from_dict( + event_dict=d, + room_version=room_version, + internal_metadata_dict=internal_metadata, + rejected_reason=rejected_reason, + ) + except ValueError: + logger.error("Unable to parse event from database: %s", event_id) + continue + original_ev.internal_metadata.stream_ordering = row.stream_ordering original_ev.internal_metadata.instance_name = row.instance_name original_ev.internal_metadata.outlier = row.outlier