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(
509509 event = content ["event" ]
510510 invite_room_state = content .get ("invite_room_state" , [])
511511
512+ if not isinstance (invite_room_state , list ):
513+ invite_room_state = []
514+
512515 # Synapse expects invite_room_state to be in unsigned, as it is in v1
513516 # API
514517
Original file line number Diff line number Diff line change @@ -880,6 +880,9 @@ async def do_knock(
880880 if stripped_room_state is None :
881881 raise KeyError ("Missing 'knock_room_state' field in send_knock response" )
882882
883+ if not isinstance (stripped_room_state , list ):
884+ raise TypeError ("'knock_room_state' has wrong type" )
885+
883886 event .unsigned ["knock_room_state" ] = stripped_room_state
884887
885888 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(
815815
816816 stripped_state = []
817817 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" , []
820820 )
821+ if not isinstance (invite_state , list ):
822+ invite_state = []
823+
824+ stripped_state .extend (invite_state )
821825 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 )
825831
826832 stripped_state .append (strip_event (invite_or_knock_event ))
827833
Original file line number Diff line number Diff line change @@ -74,9 +74,13 @@ async def get_context_for_event(
7474
7575 room_state = []
7676 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
7880 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
8084
8185 # Ideally we'd reuse the logic in `calculate_room_name`, but that gets
8286 # 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(
436436 )
437437 unsigned = dict (invite .get ("unsigned" , {}))
438438 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 )
440445 invited_state .append (invite )
441446 invited [room .room_id ] = {"invite_state" : {"events" : invited_state }}
442447
@@ -476,7 +481,10 @@ async def encode_knocked(
476481 # Extract the stripped room state from the unsigned dict
477482 # This is for clients to get a little bit of information about
478483 # 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 )
480488
481489 # Append the actual knock membership event itself as well. This provides
482490 # the client with:
You can’t perform that action at this time.
0 commit comments