diff options
author | Neil Alexander <neilalexander@users.noreply.github.com> | 2020-09-08 10:28:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-08 10:28:13 +0100 |
commit | 726ad6ce2e0a030eae522bd9ac2a660cf04f36a8 (patch) | |
tree | 2d3d4277094dc84e65fc8cf30f2cfb68ef6807b7 /federationapi | |
parent | 1602df87525bfed6e226d59feb2ffdcb9d1aeadb (diff) |
Backoff ignore invalid signatures (#1408)
Diffstat (limited to 'federationapi')
-rw-r--r-- | federationapi/routing/send.go | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/federationapi/routing/send.go b/federationapi/routing/send.go index c6e2a3dc..9def7c3c 100644 --- a/federationapi/routing/send.go +++ b/federationapi/routing/send.go @@ -477,7 +477,12 @@ func (t *txnReq) lookupStateAfterEvent(ctx context.Context, roomVersion gomatrix // fetch the event we're missing and add it to the pile h, err := t.lookupEvent(ctx, roomVersion, eventID, false) - if err != nil { + switch err.(type) { + case verifySigError: + return respState, nil + case nil: + // do nothing + default: return nil, err } t.haveEvents[h.EventID()] = h @@ -586,7 +591,15 @@ retryAllowedState: switch missing := err.(type) { case gomatrixserverlib.MissingAuthEventError: h, err2 := t.lookupEvent(ctx, roomVersion, missing.AuthEventID, true) - if err2 != nil { + switch err2.(type) { + case verifySigError: + return &gomatrixserverlib.RespState{ + AuthEvents: authEventList, + StateEvents: resolvedStateEvents, + }, nil + case nil: + // do nothing + default: return nil, fmt.Errorf("missing auth event %s and failed to look it up: %w", missing.AuthEventID, err2) } util.GetLogger(ctx).Infof("fetched event %s", missing.AuthEventID) @@ -762,7 +775,12 @@ func (t *txnReq) lookupMissingStateViaStateIDs(ctx context.Context, roomID, even for missingEventID := range missing { var h *gomatrixserverlib.HeaderedEvent h, err = t.lookupEvent(ctx, roomVersion, missingEventID, false) - if err != nil { + switch err.(type) { + case verifySigError: + continue + case nil: + // do nothing + default: return nil, err } t.haveEvents[h.EventID()] = h |