Various fixes in fetchAuthEvents

This commit is contained in:
Neil Alexander 2024-11-29 21:33:55 +00:00 committed by Till Faelligen
parent 7cc7ebb46f
commit 5cbd93cbc3
No known key found for this signature in database
GPG key ID: 3DF82D8AB9211D4E

View file

@ -738,6 +738,11 @@ func (r *Inputer) fetchAuthEvents(
return fmt.Errorf("no servers provided event auth for event ID %q, tried servers %v", event.EventID(), servers) return fmt.Errorf("no servers provided event auth for event ID %q, tried servers %v", event.EventID(), servers)
} }
// Start with a clean state and see if we can auth with what the remote
// server told us. Otherwise earlier topologically sorted events could
// fail to be authed by more recent referenced ones.
auth.Clear()
// Reuse these to reduce allocations. // Reuse these to reduce allocations.
authEventNIDs := make([]types.EventNID, 0, 5) authEventNIDs := make([]types.EventNID, 0, 5)
isRejected := false isRejected := false
@ -749,7 +754,11 @@ nextAuthEvent:
// If we already know about this event from the database then we don't // If we already know about this event from the database then we don't
// need to store it again or do anything further with it, so just skip // need to store it again or do anything further with it, so just skip
// over it rather than wasting cycles. // over it rather than wasting cycles.
if ev, ok := known[authEvent.EventID()]; ok && ev != nil { if ev, ok := known[authEvent.EventID()]; ok && ev != nil && !ev.Rejected {
// Need to add to the auth set for the next event being processed.
if err := auth.AddEvent(authEvent); err != nil {
return fmt.Errorf("auth.AddEvent: %w", err)
}
continue nextAuthEvent continue nextAuthEvent
} }
@ -768,7 +777,7 @@ nextAuthEvent:
for _, eventID := range authEvent.AuthEventIDs() { for _, eventID := range authEvent.AuthEventIDs() {
knownEvent, ok := known[eventID] knownEvent, ok := known[eventID]
if !ok { if !ok {
continue nextAuthEvent return fmt.Errorf("auth event ID %s not known but should be", eventID)
} }
authEventNIDs = append(authEventNIDs, knownEvent.EventNID) authEventNIDs = append(authEventNIDs, knownEvent.EventNID)
} }