Skip to content

Commit 95fdacc

Browse files
better handling of missing creator key in room creation
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
1 parent a4a7a01 commit 95fdacc

1 file changed

Lines changed: 21 additions & 5 deletions

File tree

‎lib/SyTest/Federation/AuthChecks.pm‎

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,24 @@ sub auth_check_event
9898
return 1;
9999
}
100100

101+
sub _creator_for_create_event
102+
{
103+
my ( $create_event ) = @_;
104+
105+
$create_event or
106+
return undef;
107+
108+
my $room_version = $create_event->{content}{room_version};
109+
110+
# For room version 11+, 'creator' is absent from content; creator is implicit from sender.
111+
if( defined $room_version and $room_version =~ /\A[0-9]+\z/ and $room_version >= 11 ) {
112+
return $create_event->{sender};
113+
}
114+
115+
# For older room versions, 'creator' must be present explicitly.
116+
return $create_event->{content}{creator};
117+
}
118+
101119
sub auth_check_event_m_room_create
102120
{
103121
my $self = shift;
@@ -108,9 +126,8 @@ sub auth_check_event_m_room_create
108126
return 0;
109127

110128
# Any m.room.create event is acceptable, provided that the creator matches.
111-
# For room version 11+, 'creator' is absent from content; creator is implicit from sender.
112-
my $creator = $event->{content}{creator} // $event->{sender};
113-
return $event->{sender} eq $creator;
129+
my $creator = _creator_for_create_event( $event );
130+
return defined( $creator ) and $event->{sender} eq $creator;
114131
}
115132

116133
sub auth_check_event_m_room_member
@@ -131,8 +148,7 @@ sub auth_check_event_m_room_member
131148
$accepted_events, $event->{auth_events}, "m.room.create"
132149
);
133150

134-
# For room version 11+, 'creator' is absent from content; use sender instead
135-
my $creator = $create_event ? ( $create_event->{content}{creator} // $create_event->{sender} ) : undef;
151+
my $creator = _creator_for_create_event( $create_event );
136152
if( $creator and $event->{state_key} eq $creator ) {
137153
return 1;
138154
}

0 commit comments

Comments
 (0)