Detect types.MissingStateError in CheckServerAllowedToSeeEvent

This commit is contained in:
Neil Alexander 2022-08-23 12:58:43 +01:00
parent 95a509757a
commit 3c8c0c192d
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 11 additions and 4 deletions

View file

@ -254,8 +254,15 @@ func CheckServerAllowedToSeeEvent(
return false, err
}
default:
// Something else went wrong
return false, err
switch err.(type) {
case types.MissingStateError:
// TODO: This may prevent other servers from requesting outliers from us.
// Is this the right thing to do?
return false, nil
default:
// Something else went wrong
return false, err
}
}
return auth.IsServerAllowed(serverName, isServerInRoom, stateAtEvent), nil
}

View file

@ -346,7 +346,7 @@ func (s *eventStatements) BulkSelectStateAtEventByID(
// Genuine create events are the only case where it's OK to have no previous state.
isCreate := result.EventTypeNID == types.MRoomCreateNID && result.EventStateKeyNID == 1
if result.BeforeStateSnapshotNID == 0 && !isCreate {
return nil, types.MissingEventError(
return nil, types.MissingStateError(
fmt.Sprintf("storage: missing state for event NID %d", result.EventNID),
)
}

View file

@ -362,7 +362,7 @@ func (s *eventStatements) BulkSelectStateAtEventByID(
// Genuine create events are the only case where it's OK to have no previous state.
isCreate := result.EventTypeNID == types.MRoomCreateNID && result.EventStateKeyNID == 1
if result.BeforeStateSnapshotNID == 0 && !isCreate {
return nil, types.MissingEventError(
return nil, types.MissingStateError(
fmt.Sprintf("storage: missing state for event NID %d", result.EventNID),
)
}