Fix regression where synapse checked whether push rules were valid JSON before the compatibility hack that handled clients sending invalid JSON
1 files changed, 17 insertions, 4 deletions
diff --git a/synapse/http/servlet.py b/synapse/http/servlet.py
index 1996f8b136..1c8bd8666f 100644
--- a/synapse/http/servlet.py
+++ b/synapse/http/servlet.py
@@ -119,13 +119,13 @@ def parse_string(request, name, default=None, required=False,
return default
-def parse_json_object_from_request(request):
- """Parse a JSON object from the body of a twisted HTTP request.
+def parse_json_value_from_request(request):
+ """Parse a JSON value from the body of a twisted HTTP request.
:param request: the twisted HTTP request.
+ :returns: The JSON value.
:raises
- SynapseError if the request body couldn't be decoded as JSON or
- if it wasn't a JSON object.
+ SynapseError if the request body couldn't be decoded as JSON.
"""
try:
content_bytes = request.content.read()
@@ -137,6 +137,19 @@ def parse_json_object_from_request(request):
except simplejson.JSONDecodeError:
raise SynapseError(400, "Content not JSON.", errcode=Codes.NOT_JSON)
+ return content
+
+
+def parse_json_object_from_request(request):
+ """Parse a JSON object from the body of a twisted HTTP request.
+
+ :param request: the twisted HTTP request.
+ :raises
+ SynapseError if the request body couldn't be decoded as JSON or
+ if it wasn't a JSON object.
+ """
+ content = parse_json_value_from_request(request)
+
if type(content) != dict:
message = "Content must be a JSON object."
raise SynapseError(400, message, errcode=Codes.BAD_JSON)
|