summary refs log tree commit diff
diff options
context:
space:
mode:
authorJohannesKleine <linux@cj-k.de>2021-11-01 11:40:41 +0100
committerGitHub <noreply@github.com>2021-11-01 10:40:41 +0000
commit29ffd680bf0d0bf50383ad23404b348bf9cf90aa (patch)
treec5ada862758f6c93766db1aad67c51f72d8443fe
parentDeprecate user_may_create_room_with_invites (#11206) (diff)
downloadsynapse-29ffd680bf0d0bf50383ad23404b348bf9cf90aa.tar.xz
Stop synapse from saving messages in device_inbox for hidden devices. (#10097)
Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com>
-rw-r--r--changelog.d/10097.bugfix1
-rw-r--r--synapse/storage/databases/main/deviceinbox.py8
2 files changed, 7 insertions, 2 deletions
diff --git a/changelog.d/10097.bugfix b/changelog.d/10097.bugfix
new file mode 100644

index 0000000000..5d3d9587c2 --- /dev/null +++ b/changelog.d/10097.bugfix
@@ -0,0 +1 @@ +Fix a long-standing bug which allowed hidden devices to receive to-device messages, resulting in unnecessary database bloat. diff --git a/synapse/storage/databases/main/deviceinbox.py b/synapse/storage/databases/main/deviceinbox.py
index d03b5e5a7d..25e9c1efe1 100644 --- a/synapse/storage/databases/main/deviceinbox.py +++ b/synapse/storage/databases/main/deviceinbox.py
@@ -489,10 +489,12 @@ class DeviceInboxWorkerStore(SQLBaseStore): devices = list(messages_by_device.keys()) if len(devices) == 1 and devices[0] == "*": # Handle wildcard device_ids. + # We exclude hidden devices (such as cross-signing keys) here as they are + # not expected to receive to-device messages. devices = self.db_pool.simple_select_onecol_txn( txn, table="devices", - keyvalues={"user_id": user_id}, + keyvalues={"user_id": user_id, "hidden": False}, retcol="device_id", ) @@ -505,10 +507,12 @@ class DeviceInboxWorkerStore(SQLBaseStore): if not devices: continue + # We exclude hidden devices (such as cross-signing keys) here as they are + # not expected to receive to-device messages. rows = self.db_pool.simple_select_many_txn( txn, table="devices", - keyvalues={"user_id": user_id}, + keyvalues={"user_id": user_id, "hidden": False}, column="device_id", iterable=devices, retcols=("device_id",),