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

Fix /room/.../event/... to return the *original* event after any edits #12476

Merged
merged 2 commits into from
Apr 19, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/12476.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix a long-standing bug which incorrectly caused `GET /_matrix/client/r3/rooms/{roomId}/event/{eventId}` to return edited events rather than the original.
21 changes: 13 additions & 8 deletions synapse/events/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,17 +402,18 @@ def serialize_event(
*,
config: SerializeEventConfig = _DEFAULT_SERIALIZE_EVENT_CONFIG,
bundle_aggregations: Optional[Dict[str, "BundledAggregations"]] = None,
apply_edits: bool = True,
) -> JsonDict:
"""Serializes a single event.

Args:
event: The event being serialized.
time_now: The current time in milliseconds
config: Event serialization config
bundle_aggregations: Whether to include the bundled aggregations for this
event. Only applies to non-state events. (State events never include
bundled aggregations.)

bundle_aggregations: A map from event_id to the aggregations to be bundled
into the event.
apply_edits: Whether the content of the event should be modified to reflect
any replacement in `bundle_aggregations[<event_id>].replace`.
Returns:
The serialized event
"""
Expand All @@ -430,8 +431,9 @@ def serialize_event(
event,
time_now,
config,
bundle_aggregations[event.event_id],
event_aggregations,
serialized_event,
apply_edits=apply_edits,
)

return serialized_event
Expand Down Expand Up @@ -470,6 +472,7 @@ def _inject_bundled_aggregations(
config: SerializeEventConfig,
aggregations: "BundledAggregations",
serialized_event: JsonDict,
apply_edits: bool,
) -> None:
"""Potentially injects bundled aggregations into the unsigned portion of the serialized event.

Expand All @@ -479,7 +482,8 @@ def _inject_bundled_aggregations(
aggregations: The bundled aggregation to serialize.
serialized_event: The serialized event which may be modified.
config: Event serialization config

apply_edits: Whether the content of the event should be modified to reflect
any replacement in `aggregations.replace`.
"""
serialized_aggregations = {}

Expand All @@ -490,9 +494,10 @@ def _inject_bundled_aggregations(
serialized_aggregations[RelationTypes.REFERENCE] = aggregations.references

if aggregations.replace:
# If there is an edit, apply it to the event.
# If there is an edit, optionally apply it to the event.
edit = aggregations.replace
self._apply_edit(event, serialized_event, edit)
if apply_edits:
clokep marked this conversation as resolved.
Show resolved Hide resolved
self._apply_edit(event, serialized_event, edit)

# Include information about it in the relations dict.
serialized_aggregations[RelationTypes.REPLACE] = {
Expand Down
4 changes: 3 additions & 1 deletion synapse/rest/client/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -669,8 +669,10 @@ async def on_GET(
)

time_now = self.clock.time_msec()
# per MSC2676, /rooms/{roomId}/event/{eventId}, should return the
# *original* event, rather than the edited version
event_dict = self._event_serializer.serialize_event(
event, time_now, bundle_aggregations=aggregations
event, time_now, bundle_aggregations=aggregations, apply_edits=False
)
return 200, event_dict

Expand Down