Sort and unique

This commit is contained in:
Neil Alexander 2022-05-12 13:09:57 +01:00
parent 1a39c20a35
commit db89a7e813
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -233,11 +233,16 @@ func (u *latestEventsUpdater) latestState() error {
}
}
// Get a list of the current latest events. This may or may not
// include the new event from the input path, depending on whether
// it is a forward extremity or not.
combinedExtremities := types.StateAtEventAndReferences(append(u.latest, u.oldLatest...))
util.Unique(combinedExtremities)
// Take the old set of extremities and the new set of extremities and
// mash them together into a list. This may or may not include the new event
// from the input path, depending on whether it became a forward extremity
// or not. We'll then run state resolution across all of them to determine
// the new current state of the room. Including the old extremities here
// ensures that new forward extremities with bad state snapshots (from
// possible malicious actors) can't completely corrupt the room state
// away from what it was before.
combinedExtremities := types.StateAtEventAndReferences(append(u.oldLatest, u.latest...))
util.SortAndUnique(combinedExtremities)
latestStateAtEvents := make([]types.StateAtEvent, len(combinedExtremities))
for i := range combinedExtremities {
latestStateAtEvents[i] = combinedExtremities[i].StateAtEvent