File tree Expand file tree Collapse file tree 5 files changed +33
-9
lines changed
federation/transport/server Expand file tree Collapse file tree 5 files changed +33
-9
lines changed Original file line number Diff line number Diff line change @@ -509,6 +509,9 @@ async def on_PUT(
509
509
event = content ["event" ]
510
510
invite_room_state = content .get ("invite_room_state" , [])
511
511
512
+ if not isinstance (invite_room_state , list ):
513
+ invite_room_state = []
514
+
512
515
# Synapse expects invite_room_state to be in unsigned, as it is in v1
513
516
# API
514
517
Original file line number Diff line number Diff line change @@ -880,6 +880,9 @@ async def do_knock(
880
880
if stripped_room_state is None :
881
881
raise KeyError ("Missing 'knock_room_state' field in send_knock response" )
882
882
883
+ if not isinstance (stripped_room_state , list ):
884
+ raise TypeError ("'knock_room_state' has wrong type" )
885
+
883
886
event .unsigned ["knock_room_state" ] = stripped_room_state
884
887
885
888
context = EventContext .for_outlier (self ._storage_controllers )
Original file line number Diff line number Diff line change @@ -815,13 +815,19 @@ async def get_room_sync_data(
815
815
816
816
stripped_state = []
817
817
if invite_or_knock_event .membership == Membership .INVITE :
818
- stripped_state . extend (
819
- invite_or_knock_event . unsigned . get ( "invite_room_state" , [])
818
+ invite_state = invite_or_knock_event . unsigned . get (
819
+ "invite_room_state" , []
820
820
)
821
+ if not isinstance (invite_state , list ):
822
+ invite_state = []
823
+
824
+ stripped_state .extend (invite_state )
821
825
elif invite_or_knock_event .membership == Membership .KNOCK :
822
- stripped_state .extend (
823
- invite_or_knock_event .unsigned .get ("knock_room_state" , [])
824
- )
826
+ knock_state = invite_or_knock_event .unsigned .get ("knock_room_state" , [])
827
+ if not isinstance (knock_state , list ):
828
+ knock_state = []
829
+
830
+ stripped_state .extend (knock_state )
825
831
826
832
stripped_state .append (strip_event (invite_or_knock_event ))
827
833
Original file line number Diff line number Diff line change @@ -74,9 +74,13 @@ async def get_context_for_event(
74
74
75
75
room_state = []
76
76
if ev .content .get ("membership" ) == Membership .INVITE :
77
- room_state = ev .unsigned .get ("invite_room_state" , [])
77
+ invite_room_state = ev .unsigned .get ("invite_room_state" , [])
78
+ if isinstance (invite_room_state , list ):
79
+ room_state = invite_room_state
78
80
elif ev .content .get ("membership" ) == Membership .KNOCK :
79
- room_state = ev .unsigned .get ("knock_room_state" , [])
81
+ knock_room_state = ev .unsigned .get ("knock_room_state" , [])
82
+ if isinstance (knock_room_state , list ):
83
+ room_state = knock_room_state
80
84
81
85
# Ideally we'd reuse the logic in `calculate_room_name`, but that gets
82
86
# complicated to handle partial events vs pulling events from the DB.
Original file line number Diff line number Diff line change @@ -436,7 +436,12 @@ async def encode_invited(
436
436
)
437
437
unsigned = dict (invite .get ("unsigned" , {}))
438
438
invite ["unsigned" ] = unsigned
439
- invited_state = list (unsigned .pop ("invite_room_state" , []))
439
+
440
+ invited_state = unsigned .pop ("invite_room_state" , [])
441
+ if not isinstance (invited_state , list ):
442
+ invited_state = []
443
+
444
+ invited_state = list (invited_state )
440
445
invited_state .append (invite )
441
446
invited [room .room_id ] = {"invite_state" : {"events" : invited_state }}
442
447
@@ -476,7 +481,10 @@ async def encode_knocked(
476
481
# Extract the stripped room state from the unsigned dict
477
482
# This is for clients to get a little bit of information about
478
483
# the room they've knocked on, without revealing any sensitive information
479
- knocked_state = list (unsigned .pop ("knock_room_state" , []))
484
+ knocked_state = unsigned .pop ("knock_room_state" , [])
485
+ if not isinstance (knocked_state , list ):
486
+ knocked_state = []
487
+ knocked_state = list (knocked_state )
480
488
481
489
# Append the actual knock membership event itself as well. This provides
482
490
# the client with:
You can’t perform that action at this time.
0 commit comments