Handle missing data in power levels events during room upgrade. (#9395)

This commit is contained in:
Patrick Cloke 2021-02-16 08:31:39 -05:00 committed by GitHub
parent ddfdf94506
commit 731e08c63a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 162 additions and 5 deletions

View file

@ -425,17 +425,20 @@ class RoomCreationHandler(BaseHandler):
# Copy over user power levels now as this will not be possible with >100PL users once
# the room has been created
# Calculate the minimum power level needed to clone the room
event_power_levels = power_levels.get("events", {})
state_default = power_levels.get("state_default", 0)
ban = power_levels.get("ban")
state_default = power_levels.get("state_default", 50)
ban = power_levels.get("ban", 50)
needed_power_level = max(state_default, ban, max(event_power_levels.values()))
# Get the user's current power level, this matches the logic in get_user_power_level,
# but without the entire state map.
user_power_levels = power_levels.setdefault("users", {})
users_default = power_levels.get("users_default", 0)
current_power_level = user_power_levels.get(user_id, users_default)
# Raise the requester's power level in the new room if necessary
current_power_level = power_levels["users"][user_id]
if current_power_level < needed_power_level:
power_levels["users"][user_id] = needed_power_level
user_power_levels[user_id] = needed_power_level
await self._send_events_for_new_room(
requester,