1
0

bugfix: calculate the PL for non-creators correctly in v11 rooms (#18547)

Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
This commit is contained in:
Kegan Dougal
2025-06-13 12:56:39 +01:00
committed by GitHub
parent 3b94e40cc8
commit db8a8d33fe
3 changed files with 41 additions and 18 deletions
+1
View File
@@ -0,0 +1 @@
Fix an issue where during state resolution for v11 rooms Synapse would incorrectly calculate the power level of the creator when there was no power levels event in the room.
+1 -1
View File
@@ -255,7 +255,7 @@ async def _get_power_level_for_sender(
)
if aev and (aev.type, aev.state_key) == (EventTypes.Create, ""):
creator = (
event.sender
aev.sender
if event.room_version.implicit_room_creator
else aev.content.get("creator")
)
+39 -17
View File
@@ -961,25 +961,47 @@ class AuthChainDifferenceTestCase(unittest.TestCase):
f"wrong pl for {user_id} on v{room_version.identifier}",
)
# the creator alone without PL is 100
got_creator_pl = self.successResultOf(
defer.ensureDeferred(
_get_power_level_for_sender(
ROOM_ID,
member_event.event_id,
{
member_event.event_id: member_event,
create_event.event_id: create_event,
},
store,
# the creator alone without PL is 100, everyone else is 0
want_pls = {
ALICE: 100,
BOB: 0,
CHARLIE: 0,
}
for user_id, want_pl in want_pls.items():
test_event = make_event_from_dict(
{
"room_id": ROOM_ID,
"sender": user_id,
"type": EventTypes.Topic,
"state_key": "",
"content": {"topic": "Test"},
"auth_events": [
create_event.event_id,
member_event.event_id,
pl_event.event_id,
],
"prev_events": [pl_event.event_id],
},
room_version,
)
got_pl = self.successResultOf(
defer.ensureDeferred(
_get_power_level_for_sender(
ROOM_ID,
test_event.event_id,
{
test_event.event_id: test_event,
create_event.event_id: create_event,
},
store,
)
)
)
)
self.assertEqual(
got_creator_pl,
100,
f"wrong pl for creator with no PL event on v{room_version.identifier}",
)
self.assertEqual(
got_pl,
want_pl,
f"wrong pl for {user_id} with no PL event on v{room_version.identifier}",
)
T = TypeVar("T")