From 06aeeed6702f7d320baf0d80e0adc7f826dd5aaa Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Thu, 28 Jan 2021 12:33:36 -0500 Subject: [PATCH] Do not assume a member is still in the room when generating email notifications. --- changelog.d/9257.bugfix | 1 + synapse/push/mailer.py | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 changelog.d/9257.bugfix diff --git a/changelog.d/9257.bugfix b/changelog.d/9257.bugfix new file mode 100644 index 000000000000..8e61d0b442d3 --- /dev/null +++ b/changelog.d/9257.bugfix @@ -0,0 +1 @@ +Fix long-standing KeyError in synapse.push.mailer in get_message_vars. diff --git a/synapse/push/mailer.py b/synapse/push/mailer.py index 745b1dde9459..78d5a24f6707 100644 --- a/synapse/push/mailer.py +++ b/synapse/push/mailer.py @@ -431,10 +431,15 @@ async def get_message_vars( if event.type != EventTypes.Message and event.type != EventTypes.Encrypted: return None - sender_state_event_id = room_state_ids[("m.room.member", event.sender)] - sender_state_event = await self.store.get_event(sender_state_event_id) - sender_name = name_from_member_event(sender_state_event) - sender_avatar_url = sender_state_event.content.get("avatar_url") + sender_state_event_id = room_state_ids.get(("m.room.member", event.sender)) + if sender_state_event_id: + sender_state_event = await self.store.get_event(sender_state_event_id) + sender_name = name_from_member_event(sender_state_event) + sender_avatar_url = sender_state_event.content.get("avatar_url") + else: + # The sender is no longer in the room for some reason. + sender_name = event.sender + sender_avatar_url = None # 'hash' for deterministically picking default images: use # sender_hash % the number of default images to choose from