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

Commit

Permalink
Merge pull request #2719 from matrix-org/rav/handle_missing_hashes
Browse files Browse the repository at this point in the history
Fix 500 when joining matrix-dev
  • Loading branch information
richvdh authored Nov 29, 2017
2 parents c2a1194 + 7303ed6 commit 8b45de9
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions synapse/crypto/event_signing.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,22 @@ def check_event_content_hash(event, hash_algorithm=hashlib.sha256):
"""Check whether the hash for this PDU matches the contents"""
name, expected_hash = compute_content_hash(event, hash_algorithm)
logger.debug("Expecting hash: %s", encode_base64(expected_hash))
if name not in event.hashes:

# some malformed events lack a 'hashes'. Protect against it being missing
# or a weird type by basically treating it the same as an unhashed event.
hashes = event.get("hashes")
if not isinstance(hashes, dict):
raise SynapseError(400, "Malformed 'hashes'", Codes.UNAUTHORIZED)

if name not in hashes:
raise SynapseError(
400,
"Algorithm %s not in hashes %s" % (
name, list(event.hashes),
name, list(hashes),
),
Codes.UNAUTHORIZED,
)
message_hash_base64 = event.hashes[name]
message_hash_base64 = hashes[name]
try:
message_hash_bytes = decode_base64(message_hash_base64)
except Exception:
Expand Down

0 comments on commit 8b45de9

Please sign in to comment.