From 87ffd21b291a503fd47ba938b32658c9f475aed5 Mon Sep 17 00:00:00 2001
From: Mark Haines <mark.haines@matrix.org>
Date: Tue, 26 Jul 2016 19:19:08 +0100
Subject: [PATCH] Fix a couple of bugs in the transaction and keyring code

---
 synapse/crypto/keyring.py       | 17 +++++++++--------
 synapse/storage/transactions.py |  3 ++-
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/synapse/crypto/keyring.py b/synapse/crypto/keyring.py
index d08ee0aa9..826845f69 100644
--- a/synapse/crypto/keyring.py
+++ b/synapse/crypto/keyring.py
@@ -275,14 +275,15 @@ class Keyring(object):
                     for server_name, groups in missing_groups.items()
                 }
 
-            for group in missing_groups.values():
-                group_id_to_deferred[group.group_id].errback(SynapseError(
-                    401,
-                    "No key for %s with id %s" % (
-                        group.server_name, group.key_ids,
-                    ),
-                    Codes.UNAUTHORIZED,
-                ))
+            for groups in missing_groups.values():
+                for group in groups:
+                    group_id_to_deferred[group.group_id].errback(SynapseError(
+                        401,
+                        "No key for %s with id %s" % (
+                            group.server_name, group.key_ids,
+                        ),
+                        Codes.UNAUTHORIZED,
+                    ))
 
         def on_err(err):
             for deferred in group_id_to_deferred.values():
diff --git a/synapse/storage/transactions.py b/synapse/storage/transactions.py
index 6c7481a72..6258ff172 100644
--- a/synapse/storage/transactions.py
+++ b/synapse/storage/transactions.py
@@ -24,6 +24,7 @@ from collections import namedtuple
 
 import itertools
 import logging
+import ujson as json
 
 logger = logging.getLogger(__name__)
 
@@ -101,7 +102,7 @@ class TransactionStore(SQLBaseStore):
         )
 
         if result and result["response_code"]:
-            return result["response_code"], result["response_json"]
+            return result["response_code"], json.loads(str(result["response_json"]))
         else:
             return None