diff options
author | Kim Alvefur <zash@zash.se> | 2021-11-13 22:12:39 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2021-11-13 22:12:39 +0100 |
commit | e08d82a0773a3ef9a32170e9bda191846f0de968 (patch) | |
tree | 70cc3a00b4633ff3d28f70f6c0240613cc020f48 /plugins | |
parent | 068388d9c721b38d6a5643c1cdea9b1d5d9b5494 (diff) | |
download | prosody-e08d82a0773a3ef9a32170e9bda191846f0de968.tar.gz prosody-e08d82a0773a3ef9a32170e9bda191846f0de968.zip |
mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
In this case `ret` is a table not containing the node, which makes
pubsub_error_reply() try to get an error template with that `ret` table
as index, which returns a `nil` then passed to table.unpack, which in
turn throws the error.
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/mod_pubsub/pubsub.lib.lua | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/plugins/mod_pubsub/pubsub.lib.lua b/plugins/mod_pubsub/pubsub.lib.lua index 3e29bc10..971a7fd0 100644 --- a/plugins/mod_pubsub/pubsub.lib.lua +++ b/plugins/mod_pubsub/pubsub.lib.lua @@ -278,9 +278,13 @@ end function _M.handle_disco_info_node(event, service) local stanza, reply, node = event.stanza, event.reply, event.node; local ok, ret = service:get_nodes(stanza.attr.from); + if not ok then + event.origin.send(pubsub_error_reply(stanza, ret)); + return true; + end local node_obj = ret[node]; - if not ok or not node_obj then - event.origin.send(pubsub_error_reply(stanza, ret or "item-not-found")); + if not node_obj then + event.origin.send(pubsub_error_reply(stanza, "item-not-found")); return true; end event.exists = true; |