diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2022-03-29 14:56:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-29 14:56:25 +0100 |
commit | 1f32b90b0ff0f4f4f499f95e8150efe438388270 (patch) | |
tree | 93422bf33cc20b5401af329b007527b139d198cf /synapse | |
parent | Update `LoggingTransaction.call_after` and `call_on_exception` docstrings (#1... (diff) | |
download | synapse-1f32b90b0ff0f4f4f499f95e8150efe438388270.tar.xz |
Room batch: fix up handling of unknown prev_event_ids (#12316)
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/rest/client/room_batch.py | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/synapse/rest/client/room_batch.py b/synapse/rest/client/room_batch.py index 0780485322..dd91dabedd 100644 --- a/synapse/rest/client/room_batch.py +++ b/synapse/rest/client/room_batch.py @@ -123,6 +123,19 @@ class RoomBatchSendEventRestServlet(RestServlet): errcode=Codes.INVALID_PARAM, ) + # Make sure that the prev_event_ids exist and aren't outliers - ie, they are + # regular parts of the room DAG where we know the state. + non_outlier_prev_events = await self.store.have_events_in_timeline( + prev_event_ids_from_query + ) + for prev_event_id in prev_event_ids_from_query: + if prev_event_id not in non_outlier_prev_events: + raise SynapseError( + HTTPStatus.BAD_REQUEST, + "prev_event %s does not exist, or is an outlier" % (prev_event_id,), + errcode=Codes.INVALID_PARAM, + ) + # For the event we are inserting next to (`prev_event_ids_from_query`), # find the most recent state events that allowed that message to be # sent. We will use that as a base to auth our historical messages @@ -131,14 +144,6 @@ class RoomBatchSendEventRestServlet(RestServlet): prev_event_ids_from_query ) - if not state_event_ids: - raise SynapseError( - HTTPStatus.BAD_REQUEST, - "No auth events found for given prev_event query parameter. The prev_event=%s probably does not exist." - % prev_event_ids_from_query, - errcode=Codes.INVALID_PARAM, - ) - state_event_ids_at_start = [] # Create and persist all of the state events that float off on their own # before the batch. These will most likely be all of the invite/member |