summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--synapse/storage/events_worker.py40
1 files changed, 19 insertions, 21 deletions
diff --git a/synapse/storage/events_worker.py b/synapse/storage/events_worker.py
index f18129f7a3..cbb2529d5e 100644
--- a/synapse/storage/events_worker.py
+++ b/synapse/storage/events_worker.py
@@ -538,7 +538,7 @@ class EventsWorkerStore(SQLBaseStore):
             )
 
             redacted_event = None
-            if redacted:
+            if redacted and original_ev.type != EventTypes.Redaction:
                 redacted_event = prune_event(original_ev)
 
                 redaction_id = yield self._simple_select_one_onecol(
@@ -556,28 +556,26 @@ class EventsWorkerStore(SQLBaseStore):
                 )
 
                 if because:
-                    # It's fine to do add the event directly, since get_pdu_json
-                    # will serialise this field correctly
-                    redacted_event.unsigned["redacted_because"] = because
-
-                    # Starting in room version v3, some redactions need to be
-                    # rechecked if we didn't have the redacted event at the
-                    # time, so we recheck on read instead.
-                    if because.internal_metadata.need_to_check_redaction():
-                        expected_domain = get_domain_from_id(original_ev.sender)
-                        if get_domain_from_id(because.sender) == expected_domain:
-                            # This redaction event is allowed. Mark as not needing a
-                            # recheck.
-                            because.internal_metadata.recheck_redaction = False
-                        else:
-                            # Senders don't match, so the event isn't actually redacted
-                            redacted_event = None
-
                     if because.room_id != original_ev.room_id:
                         redacted_event = None
-
-                    if original_ev.type == EventTypes.Redaction:
-                        redacted_event = None
+                    else:
+                        # It's fine to do add the event directly, since get_pdu_json
+                        # will serialise this field correctly
+                        redacted_event.unsigned["redacted_because"] = because
+
+                        # Starting in room version v3, some redactions need to be
+                        # rechecked if we didn't have the redacted event at the
+                        # time, so we recheck on read instead.
+                        if because.internal_metadata.need_to_check_redaction():
+                            expected_domain = get_domain_from_id(original_ev.sender)
+                            if get_domain_from_id(because.sender) == expected_domain:
+                                # This redaction event is allowed. Mark as not needing a
+                                # recheck.
+                                because.internal_metadata.recheck_redaction = False
+                            else:
+                                # Senders don't match, so the event isn't actually
+                                # redacted
+                                redacted_event = None
 
             cache_entry = _EventCacheEntry(
                 event=original_ev, redacted_event=redacted_event