summary refs log tree commit diff
path: root/synapse/handlers
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/handlers
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/handlers')
-rw-r--r--synapse/handlers/federation.py14
1 files changed, 7 insertions, 7 deletions
diff --git a/synapse/handlers/federation.py b/synapse/handlers/federation.py
index 2201cd977e..17779475b8 100644
--- a/synapse/handlers/federation.py
+++ b/synapse/handlers/federation.py
@@ -349,7 +349,7 @@ class FederationHandler(BaseHandler):
         handled_events = set()
 
         try:
-            builder.event_id = self.event_factory.create_event_id()
+            builder.event_id = self.event_builder_factory.create_event_id()
             builder.origin = self.hs.hostname
             builder.content = content
 
@@ -593,13 +593,13 @@ class FederationHandler(BaseHandler):
             }
 
             event = yield self.store.get_event(event_id)
-            if hasattr(event, "state_key"):
+            if event and event.is_state():
                 # Get previous state
-                if hasattr(event, "replaces_state") and event.replaces_state:
-                    prev_event = yield self.store.get_event(
-                        event.replaces_state
-                    )
-                    results[(event.type, event.state_key)] = prev_event
+                if "replaces_state" in event.unsigned:
+                    prev_id = event.unsigned["replaces_state"]
+                    if prev_id != event.event_id:
+                        prev_event = yield self.store.get_event(prev_id)
+                        results[(event.type, event.state_key)] = prev_event
                 else:
                     del results[(event.type, event.state_key)]