From f8cf9fe2d61100b5819685334b0bd8d2efafe72a Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Thu, 8 Oct 2020 11:38:48 +0100 Subject: [PATCH] Return a non-fatal error to the federation API on a state regression --- roomserver/internal/input/input_latest_events.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/roomserver/internal/input/input_latest_events.go b/roomserver/internal/input/input_latest_events.go index 7be6372b2..3657c9ebf 100644 --- a/roomserver/internal/input/input_latest_events.go +++ b/roomserver/internal/input/input_latest_events.go @@ -236,10 +236,12 @@ func (u *latestEventsUpdater) latestState() error { if len(u.removed) > len(u.added) { // This really shouldn't happen. // TODO: What is ultimately the best way to handle this situation? - return fmt.Errorf( - "invalid state delta wants to remove %d state but only add %d state (between state snapshots %d and %d)", - len(u.removed), len(u.added), u.oldStateNID, u.newStateNID, - ) + return &gomatrixserverlib.NotAllowed{ + Message: fmt.Sprintf( + "invalid state delta wants to remove %d state but only add %d state (between state snapshots %d and %d)", + len(u.removed), len(u.added), u.oldStateNID, u.newStateNID, + ), + } } // Also work out the state before the event removes and the event