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

Commit e8dcada

Browse files
babolivieranoadragon453
authored andcommitted
Make sure a retention policy is a state event (#8527)
* Make sure a retention policy is a state event * Changelog
1 parent 4d5ed3d commit e8dcada

File tree

3 files changed

+8
-0
lines changed

3 files changed

+8
-0
lines changed

changelog.d/8527.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix a bug introduced in v1.7.0 that could cause Synapse to insert values from non-state `m.room.retention` events into the `room_retention` database table.

synapse/events/validator.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ def _validate_retention(self, event):
8383
Args:
8484
event (FrozenEvent): The event to validate.
8585
"""
86+
if not event.is_state():
87+
raise SynapseError(code=400, msg="must be a state event")
88+
8689
min_lifetime = event.content.get("min_lifetime")
8790
max_lifetime = event.content.get("max_lifetime")
8891

synapse/storage/databases/main/events.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,10 @@ def _store_room_message_txn(self, txn, event):
12411241
)
12421242

12431243
def _store_retention_policy_for_room_txn(self, txn, event):
1244+
if not event.is_state():
1245+
logger.debug("Ignoring non-state m.room.retention event")
1246+
return
1247+
12441248
if hasattr(event, "content") and (
12451249
"min_lifetime" in event.content or "max_lifetime" in event.content
12461250
):

0 commit comments

Comments
 (0)