Fix noop checks when updating device keys

Clients often reupload their device keys (for some reason) so its
important for the server to check for no-ops before sending out device
list update notifications.

The check is broken in python 3 due to the fact comparing bytes and
unicode always fails, and that we write bytes to the DB but get unicode
when we read.
This commit is contained in:
Erik Johnston 2018-11-08 12:14:20 +00:00 committed by Andrew Morgan
parent ef77ab59a7
commit 755f42d769

View file

@ -40,6 +40,11 @@ class EndToEndKeyStore(SQLBaseStore):
allow_none=True,
)
if old_key_json and not isinstance(old_key_json, bytes):
# In py3 we need old_key_json to match new_key_json type. The DB
# returns unicode while encode_canonical_json returns bytes
old_key_json = old_key_json.encode("utf-8")
new_key_json = encode_canonical_json(device_keys)
if old_key_json == new_key_json:
return False