summary refs log tree commit diff
path: root/synapse/storage
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-12-11 15:56:01 +0000
committerErik Johnston <erik@matrix.org>2014-12-11 15:56:06 +0000
commit0b0436923819a0252a7a2a6f70a1f929b45b9114 (patch)
treee4b6286969345858b37049a5d82777200023d844 /synapse/storage
parentFix prev_content (diff)
downloadsynapse-0b0436923819a0252a7a2a6f70a1f929b45b9114.tar.xz
Fix public room joining by making sure replaces_state never points to itself.
Diffstat (limited to 'synapse/storage')
-rw-r--r--synapse/storage/_base.py6
1 files changed, 4 insertions, 2 deletions
diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py
index e9cf73a8e2..b6f8817b62 100644
--- a/synapse/storage/_base.py
+++ b/synapse/storage/_base.py
@@ -451,7 +451,8 @@ class SQLBaseStore(object):
 
         return events
 
-    def _get_event_txn(self, txn, event_id, check_redacted=True):
+    def _get_event_txn(self, txn, event_id, check_redacted=True,
+                       get_prev_content=True):
         sql = (
             "SELECT json, r.event_id FROM event_json as e "
             "LEFT JOIN redactions as r ON e.event_id = r.redacts "
@@ -487,10 +488,11 @@ class SQLBaseStore(object):
             if because:
                 ev.unsigned["redacted_because"] = because
 
-        if "replaces_state" in ev.unsigned:
+        if get_prev_content and "replaces_state" in ev.unsigned:
             ev.unsigned["prev_content"] = self._get_event_txn(
                 txn,
                 ev.unsigned["replaces_state"],
+                get_prev_content=False,
             ).get_dict()["content"]
 
         return ev