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

Commit e1b15f2

Browse files
David Robertsonclokep
David Robertson
andauthored
Fix /key/v2/server calls with URL-unsafe key IDs (#14490)
Co-authored-by: Patrick Cloke <[email protected]>
1 parent 78e23ee commit e1b15f2

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

changelog.d/14490.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix a bug introduced in Synapse 0.9 where it would fail to fetch server keys whose IDs contain a forward slash.

synapse/crypto/keyring.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -857,7 +857,7 @@ async def get_server_verify_key_v2_direct(
857857
response = await self.client.get_json(
858858
destination=server_name,
859859
path="/_matrix/key/v2/server/"
860-
+ urllib.parse.quote(requested_key_id),
860+
+ urllib.parse.quote(requested_key_id, safe=""),
861861
ignore_backoff=True,
862862
# we only give the remote server 10s to respond. It should be an
863863
# easy request to handle, so if it doesn't reply within 10s, it's

tests/crypto/test_keyring.py

+12
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,18 @@ async def get_json(destination, path, **kwargs):
469469
keys = self.get_success(fetcher.get_keys(SERVER_NAME, ["key1"], 0))
470470
self.assertEqual(keys, {})
471471

472+
def test_keyid_containing_forward_slash(self) -> None:
473+
"""We should url-encode any url unsafe chars in key ids.
474+
475+
Detects https://github.com/matrix-org/synapse/issues/14488.
476+
"""
477+
fetcher = ServerKeyFetcher(self.hs)
478+
self.get_success(fetcher.get_keys("example.com", ["key/potato"], 0))
479+
480+
self.http_client.get_json.assert_called_once()
481+
args, kwargs = self.http_client.get_json.call_args
482+
self.assertEqual(kwargs["path"], "/_matrix/key/v2/server/key%2Fpotato")
483+
472484

473485
class PerspectivesKeyFetcherTestCase(unittest.HomeserverTestCase):
474486
def make_homeserver(self, reactor, clock):

0 commit comments

Comments
 (0)