Software /
code /
prosody
Changeset
13676:40c309f8b676 13.0
mod_presence: Fix traceback if origin gets disconnected during processing
Fixes #1887
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 13 Feb 2025 14:00:08 +0000 |
parents | 13674:1ba58459c919 |
children | 13677:2389b092f781 13678:acb87cc2d48b |
files | plugins/mod_presence.lua |
diffstat | 1 files changed, 10 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_presence.lua Thu Feb 13 13:04:37 2025 +0000 +++ b/plugins/mod_presence.lua Thu Feb 13 14:00:08 2025 +0000 @@ -54,11 +54,12 @@ if priority < -128 then priority = -128 end if priority > 127 then priority = 127 end else priority = 0; end + + local node, host = origin.username, origin.host; + local roster = origin.roster; if full_sessions[origin.full_jid] then -- if user is still connected origin.send(stanza); -- reflect their presence back to them end - local roster = origin.roster; - local node, host = origin.username, origin.host; local user = bare_sessions[node.."@"..host]; for _, res in pairs(user and user.sessions or NULL) do -- broadcast to all resources if res ~= origin and res.presence then -- to resource @@ -72,6 +73,13 @@ core_post_stanza(origin, stanza, true); end end + + -- It's possible that after the network activity above, the origin + -- has been disconnected (particularly if something happened while + -- sending the reflection). So we abort further presence processing + -- in that case. + if not origin.type then return; end + stanza.attr.to = nil; if stanza.attr.type == nil and not origin.presence then -- initial presence module:fire_event("presence/initial", { origin = origin, stanza = stanza } );