@@ -201,8 +201,9 @@ func (r *FederationInternalAPI) performJoinUsingServer(
201
201
if respMakeJoin .RoomVersion == "" {
202
202
respMakeJoin .RoomVersion = setDefaultRoomVersionFromJoinEvent (respMakeJoin .JoinEvent )
203
203
}
204
- if _ , err = respMakeJoin .RoomVersion .EventFormat (); err != nil {
205
- return fmt .Errorf ("respMakeJoin.RoomVersion.EventFormat: %w" , err )
204
+ verImpl , err := gomatrixserverlib .GetRoomVersion (respMakeJoin .RoomVersion )
205
+ if err != nil {
206
+ return err
206
207
}
207
208
208
209
// Build the join event.
@@ -235,7 +236,7 @@ func (r *FederationInternalAPI) performJoinUsingServer(
235
236
// contain signatures that we don't know about.
236
237
if len (respSendJoin .Event ) > 0 {
237
238
var remoteEvent * gomatrixserverlib.Event
238
- remoteEvent , err = respMakeJoin . RoomVersion .NewEventFromUntrustedJSON (respSendJoin .Event )
239
+ remoteEvent , err = verImpl .NewEventFromUntrustedJSON (respSendJoin .Event )
239
240
if err == nil && isWellFormedMembershipEvent (
240
241
remoteEvent , roomID , userID ,
241
242
) {
@@ -464,8 +465,8 @@ func (r *FederationInternalAPI) performOutboundPeekUsingServer(
464
465
if respPeek .RoomVersion == "" {
465
466
respPeek .RoomVersion = gomatrixserverlib .RoomVersionV1
466
467
}
467
- if _ , err = respPeek .RoomVersion . EventFormat (); err != nil {
468
- return fmt .Errorf ("respPeek.RoomVersion.EventFormat : %w " , err )
468
+ if ! gomatrixserverlib . KnownRoomVersion ( respPeek .RoomVersion ) {
469
+ return fmt .Errorf ("unknown room version : %s " , respPeek . RoomVersion )
469
470
}
470
471
471
472
// we have the peek state now so let's process regardless of whether upstream gives up
@@ -552,6 +553,13 @@ func (r *FederationInternalAPI) PerformLeave(
552
553
continue
553
554
}
554
555
556
+ // Work out if we support the room version that has been supplied in
557
+ // the make_leave response.
558
+ _ , err = gomatrixserverlib .GetRoomVersion (respMakeLeave .RoomVersion )
559
+ if err != nil {
560
+ return err
561
+ }
562
+
555
563
// Set all the fields to be what they should be, this should be a no-op
556
564
// but it's possible that the remote server returned us something "odd"
557
565
respMakeLeave .LeaveEvent .Type = spec .MRoomMember
@@ -573,12 +581,6 @@ func (r *FederationInternalAPI) PerformLeave(
573
581
continue
574
582
}
575
583
576
- // Work out if we support the room version that has been supplied in
577
- // the make_leave response.
578
- if _ , err = respMakeLeave .RoomVersion .EventFormat (); err != nil {
579
- return gomatrixserverlib.UnsupportedRoomVersionError {}
580
- }
581
-
582
584
// Build the leave event.
583
585
event , err := respMakeLeave .LeaveEvent .Build (
584
586
time .Now (),
@@ -659,8 +661,12 @@ func (r *FederationInternalAPI) PerformInvite(
659
661
if err != nil {
660
662
return fmt .Errorf ("r.federation.SendInviteV2: failed to send invite: %w" , err )
661
663
}
664
+ verImpl , err := gomatrixserverlib .GetRoomVersion (request .RoomVersion )
665
+ if err != nil {
666
+ return err
667
+ }
662
668
663
- inviteEvent , err := request . RoomVersion .NewEventFromUntrustedJSON (inviteRes .Event )
669
+ inviteEvent , err := verImpl .NewEventFromUntrustedJSON (inviteRes .Event )
664
670
if err != nil {
665
671
return fmt .Errorf ("r.federation.SendInviteV2 failed to decode event response: %w" , err )
666
672
}
@@ -779,6 +785,10 @@ func federatedAuthProvider(
779
785
// to repeat the entire set of checks just for a missing event or two.
780
786
return func (roomVersion gomatrixserverlib.RoomVersion , eventIDs []string ) ([]* gomatrixserverlib.Event , error ) {
781
787
returning := []* gomatrixserverlib.Event {}
788
+ verImpl , err := gomatrixserverlib .GetRoomVersion (roomVersion )
789
+ if err != nil {
790
+ return nil , err
791
+ }
782
792
783
793
// See if we have retry entries for each of the supplied event IDs.
784
794
for _ , eventID := range eventIDs {
@@ -808,7 +818,7 @@ func federatedAuthProvider(
808
818
// event ID again.
809
819
for _ , pdu := range tx .PDUs {
810
820
// Try to parse the event.
811
- ev , everr := roomVersion .NewEventFromUntrustedJSON (pdu )
821
+ ev , everr := verImpl .NewEventFromUntrustedJSON (pdu )
812
822
if everr != nil {
813
823
return nil , fmt .Errorf ("missingAuth gomatrixserverlib.NewEventFromUntrustedJSON: %w" , everr )
814
824
}
0 commit comments