Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Merge commit '66a4af8d9' into anoa/dinsic_release_1_18_x
Browse files Browse the repository at this point in the history
* commit '66a4af8d9':
  Do not use canonicaljson to magically handle decoding bytes from JSON. (#7802)
  • Loading branch information
anoadragon453 committed Aug 4, 2020
2 parents 4d88e6d + 66a4af8 commit 17cbac5
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 28 deletions.
1 change: 1 addition & 0 deletions changelog.d/7802.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Switch from simplejson to the standard library json.
6 changes: 2 additions & 4 deletions synapse/api/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,11 @@
# limitations under the License.

"""Contains exceptions and error codes."""

import json
import logging
from http import HTTPStatus
from typing import Dict, List

from canonicaljson import json

from twisted.web import http

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -581,7 +579,7 @@ def to_synapse_error(self):
# try to parse the body as json, to get better errcode/msg, but
# default to M_UNKNOWN with the HTTP status as the error text
try:
j = json.loads(self.response)
j = json.loads(self.response.decode("utf-8"))
except ValueError:
j = {}

Expand Down
6 changes: 3 additions & 3 deletions synapse/federation/federation_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import json
import logging
from typing import Any, Callable, Dict, List, Match, Optional, Tuple, Union

from canonicaljson import json
from prometheus_client import Counter, Histogram

from twisted.internet import defer
Expand Down Expand Up @@ -526,9 +526,9 @@ async def on_claim_client_keys(
json_result = {} # type: Dict[str, Dict[str, dict]]
for user_id, device_keys in results.items():
for device_id, keys in device_keys.items():
for key_id, json_bytes in keys.items():
for key_id, json_str in keys.items():
json_result.setdefault(user_id, {})[device_id] = {
key_id: json.loads(json_bytes)
key_id: json.loads(json_str)
}

logger.info(
Expand Down
2 changes: 1 addition & 1 deletion synapse/handlers/cas_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ async def _validate_ticket(
return user, displayname

def _parse_cas_response(
self, cas_response_body: str
self, cas_response_body: bytes
) -> Tuple[str, Dict[str, Optional[str]]]:
"""
Retrieve the user and other parameters from the CAS response.
Expand Down
14 changes: 7 additions & 7 deletions synapse/http/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import json
import logging
import urllib
from io import BytesIO

import treq
from canonicaljson import encode_canonical_json, json
from canonicaljson import encode_canonical_json
from netaddr import IPAddress
from prometheus_client import Counter
from zope.interface import implementer, provider
Expand Down Expand Up @@ -371,7 +371,7 @@ def post_urlencoded_get_json(self, uri, args={}, headers=None):
body = yield make_deferred_yieldable(readBody(response))

if 200 <= response.code < 300:
return json.loads(body)
return json.loads(body.decode("utf-8"))
else:
raise HttpResponseException(response.code, response.phrase, body)

Expand Down Expand Up @@ -412,7 +412,7 @@ def post_json_get_json(self, uri, post_json, headers=None):
body = yield make_deferred_yieldable(readBody(response))

if 200 <= response.code < 300:
return json.loads(body)
return json.loads(body.decode("utf-8"))
else:
raise HttpResponseException(response.code, response.phrase, body)

Expand Down Expand Up @@ -441,7 +441,7 @@ def get_json(self, uri, args={}, headers=None):
actual_headers.update(headers)

body = yield self.get_raw(uri, args, headers=headers)
return json.loads(body)
return json.loads(body.decode("utf-8"))

@defer.inlineCallbacks
def put_json(self, uri, json_body, args={}, headers=None):
Expand Down Expand Up @@ -485,7 +485,7 @@ def put_json(self, uri, json_body, args={}, headers=None):
body = yield make_deferred_yieldable(readBody(response))

if 200 <= response.code < 300:
return json.loads(body)
return json.loads(body.decode("utf-8"))
else:
raise HttpResponseException(response.code, response.phrase, body)

Expand All @@ -503,7 +503,7 @@ def get_raw(self, uri, args={}, headers=None):
header name to a list of values for that header
Returns:
Deferred: Succeeds when we get *any* 2xx HTTP response, with the
HTTP body at text.
HTTP body as bytes.
Raises:
HttpResponseException on a non-2xx HTTP response.
"""
Expand Down
14 changes: 2 additions & 12 deletions synapse/http/servlet.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,9 @@
# limitations under the License.

""" This module contains base REST classes for constructing REST servlets. """

import json
import logging

from canonicaljson import json

from synapse.api.errors import Codes, SynapseError

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -214,16 +212,8 @@ def parse_json_value_from_request(request, allow_empty_body=False):
if not content_bytes and allow_empty_body:
return None

# Decode to Unicode so that simplejson will return Unicode strings on
# Python 2
try:
content_unicode = content_bytes.decode("utf8")
except UnicodeDecodeError:
logger.warning("Unable to decode UTF-8")
raise SynapseError(400, "Content not JSON.", errcode=Codes.NOT_JSON)

try:
content = json.loads(content_unicode)
content = json.loads(content_bytes.decode("utf-8"))
except Exception as e:
logger.warning("Unable to parse JSON: %s", e)
raise SynapseError(400, "Content not JSON.", errcode=Codes.NOT_JSON)
Expand Down
2 changes: 1 addition & 1 deletion tests/rest/client/v1/test_login.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ async def get_raw(uri, args):
</cas:serviceResponse>
"""
% cas_user_id
)
).encode("utf-8")

mocked_http_client = Mock(spec=["get_raw"])
mocked_http_client.get_raw.side_effect = get_raw
Expand Down

0 comments on commit 17cbac5

Please sign in to comment.