mod_pubsub: Fix traceback in disco of non-existent node (thanks Martin)
authorKim Alvefur <zash@zash.se>
Sat, 13 Nov 2021 22:12:39 +0100
changeset 11908 313d01cc4258
parent 11907 baf69f254753
child 11909 bbfa707a4756
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.
plugins/mod_pubsub/pubsub.lib.lua
--- a/plugins/mod_pubsub/pubsub.lib.lua	Sat Nov 13 13:32:43 2021 +0100
+++ b/plugins/mod_pubsub/pubsub.lib.lua	Sat Nov 13 22:12:39 2021 +0100
@@ -278,9 +278,13 @@
 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;