From 366befc6d0e545ee127e9fa7e7f357ef07172d89 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Thu, 6 Aug 2020 17:10:25 +0100 Subject: [PATCH 1/2] Add an assertion on prev_events in create_new_client_event I think this would have caught all the cases in https://github.com/matrix-org/synapse/issues/7642 - and I think a 500 makes more sense here than a 403 --- changelog.d/8041.misc | 1 + synapse/handlers/message.py | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 changelog.d/8041.misc diff --git a/changelog.d/8041.misc b/changelog.d/8041.misc new file mode 100644 index 000000000000..eefa98d74462 --- /dev/null +++ b/changelog.d/8041.misc @@ -0,0 +1 @@ +Add an assertion on prev_events in create_new_client_event. diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index e451d6dc86cb..1439cb1ff72d 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -768,6 +768,15 @@ async def create_new_client_event( else: prev_event_ids = await self.store.get_prev_events_for_room(builder.room_id) + # we now ought to have some prev_events (unless it's a create event). + # + # do a quick sanity check here, rather than waiting until we've created the + # event and then try to auth it (which fails with a somewhat confusing "No + # create event in auth events") + assert ( + builder.type == EventTypes.Create or len(prev_event_ids) > 0 + ), "Attempting to create an event with no prev_events" + event = await builder.build(prev_event_ids=prev_event_ids) context = await self.state.compute_event_context(event) if requester: From de337090f42385f06d910a5b5b68864668e23e25 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Fri, 7 Aug 2020 15:07:17 +0100 Subject: [PATCH 2/2] fix broken test --- tests/storage/test_redaction.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/storage/test_redaction.py b/tests/storage/test_redaction.py index 0f0e1cd09b6e..164d3006b359 100644 --- a/tests/storage/test_redaction.py +++ b/tests/storage/test_redaction.py @@ -251,6 +251,10 @@ def build(self, prev_event_ids): def room_id(self): return self._base_builder.room_id + @property + def type(self): + return self._base_builder.type + event_1, context_1 = self.get_success( self.event_creation_handler.create_new_client_event( EventIdManglingBuilder(