From affbb58b8bc06b630f2cbc34b722bb586869c4b1 Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 19 Mar 2020 12:35:30 -0400 Subject: [PATCH] Treat an unknown alias as a BAD_ALIAS for the canonical alias event. --- changelog.d/7109.bugfix | 1 + synapse/handlers/message.py | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 changelog.d/7109.bugfix diff --git a/changelog.d/7109.bugfix b/changelog.d/7109.bugfix new file mode 100644 index 000000000000..268de9978eed --- /dev/null +++ b/changelog.d/7109.bugfix @@ -0,0 +1 @@ +Return the proper error (M_BAD_ALIAS) when a non-existant canonical alias is provided. diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index b743fc2dcc16..3fb4055635b3 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -906,7 +906,18 @@ def persist_and_notify_client_event( directory_handler = self.hs.get_handlers().directory_handler if room_alias_str and room_alias_str != original_alias: room_alias = RoomAlias.from_string(room_alias_str) - mapping = yield directory_handler.get_association(room_alias) + try: + mapping = yield directory_handler.get_association(room_alias) + except SynapseError as e: + # Turn M_NOT_FOUND errors into M_BAD_ALIAS errors. + if e.errcode == Codes.NOT_FOUND: + raise SynapseError( + 400, + "Room alias %s does not point to the room" + % (room_alias_str,), + Codes.BAD_ALIAS, + ) + raise if mapping["room_id"] != event.room_id: raise SynapseError( @@ -932,7 +943,18 @@ def persist_and_notify_client_event( if new_alt_aliases: for alias_str in new_alt_aliases: room_alias = RoomAlias.from_string(alias_str) - mapping = yield directory_handler.get_association(room_alias) + try: + mapping = yield directory_handler.get_association(room_alias) + except SynapseError as e: + # Turn M_NOT_FOUND errors into M_BAD_ALIAS errors. + if e.errcode == Codes.NOT_FOUND: + raise SynapseError( + 400, + "Room alias %s does not point to the room" + % (room_alias_str,), + Codes.BAD_ALIAS, + ) + raise if mapping["room_id"] != event.room_id: raise SynapseError(