Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 0a00c99

Browse files
author
David Robertson
authored
Fix upgrading a room without events field in power levels (#16725)
1 parent e87499b commit 0a00c99

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

changelog.d/16725.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix a bug introduced in Synapse 1.7.2 where rooms whose power levels lacked an `events` field could not be upgraded.

synapse/handlers/room.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ async def clone_existing_room(
549549
except (TypeError, ValueError):
550550
ban = 50
551551
needed_power_level = max(
552-
state_default_int, ban, max(event_power_levels.values())
552+
state_default_int, ban, max(event_power_levels.values(), default=0)
553553
)
554554

555555
# Get the user's current power level, this matches the logic in get_user_power_level,

tests/rest/client/test_upgrade_room.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,34 @@ def test_stringy_power_levels(self) -> None:
246246
# We should now have an integer power level.
247247
self.assertEqual(new_power_levels["users"][self.creator], 100, new_power_levels)
248248

249+
def test_events_field_missing(self) -> None:
250+
"""Regression test for https://github.com/matrix-org/synapse/issues/16715."""
251+
# Create a new room.
252+
room_id = self.helper.create_room_as(
253+
self.creator, tok=self.creator_token, room_version="10"
254+
)
255+
self.helper.join(room_id, self.other, tok=self.other_token)
256+
257+
# Retrieve the room's current power levels.
258+
power_levels = self.helper.get_state(
259+
room_id,
260+
"m.room.power_levels",
261+
tok=self.creator_token,
262+
)
263+
264+
# Remove the events field and re-set the power levels.
265+
del power_levels["events"]
266+
self.helper.send_state(
267+
room_id,
268+
"m.room.power_levels",
269+
body=power_levels,
270+
tok=self.creator_token,
271+
)
272+
273+
# Upgrade the room. Check the homeserver reports success.
274+
channel = self._upgrade_room(room_id=room_id)
275+
self.assertEqual(200, channel.code, channel.result)
276+
249277
def test_space(self) -> None:
250278
"""Test upgrading a space."""
251279

0 commit comments

Comments
 (0)