summary refs log tree commit diff
path: root/synapse/events/utils.py
diff options
context:
space:
mode:
authorAndrew Morgan <andrew@amorgan.xyz>2021-04-23 17:51:52 +0100
committerAndrew Morgan <andrew@amorgan.xyz>2021-04-23 17:51:52 +0100
commit67b2aa8b9fe4c969f3e46b8a206a4f706806e19e (patch)
tree541a45ca5224603ee50b332f9a26e4954c16a855 /synapse/events/utils.py
parentMerge commit 'cc324d53f' into anoa/dinsic_release_1_31_0 (diff)
parentfederation_client: handle inline signing_keys in hs.yaml (#9647) (diff)
downloadsynapse-67b2aa8b9fe4c969f3e46b8a206a4f706806e19e.tar.xz
Merge commit '0e3558473' into anoa/dinsic_release_1_31_0
Diffstat (limited to 'synapse/events/utils.py')
-rw-r--r--synapse/events/utils.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/synapse/events/utils.py b/synapse/events/utils.py

index a0ea338ad4..7050f0c885 100644 --- a/synapse/events/utils.py +++ b/synapse/events/utils.py
@@ -22,6 +22,7 @@ from synapse.api.constants import EventTypes, RelationTypes from synapse.api.errors import Codes, SynapseError from synapse.api.room_versions import RoomVersion from synapse.util.async_helpers import yieldable_gather_results +from synapse.util.frozenutils import unfreeze from . import EventBase @@ -407,10 +408,19 @@ class EventClientSerializer: # If there is an edit replace the content, preserving existing # relations. + # Ensure we take copies of the edit content, otherwise we risk modifying + # the original event. + edit_content = edit.content.copy() + + # Unfreeze the event content if necessary, so that we may modify it below + edit_content = unfreeze(edit_content) + serialized_event["content"] = edit_content.get("m.new_content", {}) + + # Check for existing relations relations = event.content.get("m.relates_to") - serialized_event["content"] = edit.content.get("m.new_content", {}) if relations: - serialized_event["content"]["m.relates_to"] = relations + # Keep the relations, ensuring we use a dict copy of the original + serialized_event["content"]["m.relates_to"] = relations.copy() else: serialized_event["content"].pop("m.relates_to", None)