From 2de7db5f8bfa212294e2afeaa96da96f76e8489a Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Thu, 27 Feb 2020 19:42:51 +0100
Subject: mod_muc_mam: Fix traceback saving message from non-occupant (fixes
 #1497)

Caused by a plugin sending a message from the room itself.
---
 plugins/mod_muc_mam.lua | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/plugins/mod_muc_mam.lua b/plugins/mod_muc_mam.lua
index 2ce5e1b5..f7ea3136 100644
--- a/plugins/mod_muc_mam.lua
+++ b/plugins/mod_muc_mam.lua
@@ -335,11 +335,14 @@ local function save_to_history(self, stanza)
 	if stanza.name == "message" and self:get_whois() == "anyone" then
 		stored_stanza = st.clone(stanza);
 		stored_stanza.attr.to = nil;
-		local actor = jid_bare(self._occupants[stanza.attr.from].jid);
-		local affiliation = self:get_affiliation(actor) or "none";
-		local role = self:get_role(actor) or self:get_default_role(affiliation);
-		stored_stanza:add_direct_child(st.stanza("x", { xmlns = xmlns_muc_user })
-			:tag("item", { affiliation = affiliation; role = role; jid = actor }));
+		local occupant = self._occupants[stanza.attr.from];
+		if occupant then
+			local actor = jid_bare(occupant.jid);
+			local affiliation = self:get_affiliation(actor) or "none";
+			local role = self:get_role(actor) or self:get_default_role(affiliation);
+			stored_stanza:add_direct_child(st.stanza("x", { xmlns = xmlns_muc_user })
+				:tag("item", { affiliation = affiliation; role = role; jid = actor }));
+		end
 	end
 
 	-- Policy check
-- 
cgit v1.2.3