From d9d6fbb0856f87ee7d27ae1eb7d8bec9b21338cf Mon Sep 17 00:00:00 2001
From: "Paul \"LeoNerd\" Evans" <paul@matrix.org>
Date: Tue, 2 Sep 2014 11:17:43 +0100
Subject: [PATCH] Safer handling of incoming presence EDUs that may or maynot
 contain 'presence' or 'state'

---
 synapse/handlers/presence.py | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py
index b220970268..9bfceda88a 100644
--- a/synapse/handlers/presence.py
+++ b/synapse/handlers/presence.py
@@ -655,10 +655,20 @@ class PresenceHandler(BaseHandler):
             state = dict(push)
             del state["user_id"]
 
-            # Legacy handling
-            if "presence" not in state:
+            if "presence" in state:
+                # all is OK
+                pass
+            elif "state" in state:
+                # Legacy handling
                 state["presence"] = state["state"]
-            del state["state"]
+            else:
+                logger.warning("Received a presence 'push' EDU from %s without"
+                    + " either a 'presence' or 'state' key", origin
+                )
+                continue
+
+            if "state" in state:
+                del state["state"]
 
             if "last_active_ago" in state:
                 state["last_active"] = int(
-- 
GitLab