aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2018-08-19 21:56:33 +0100
committerMatthew Wild <mwild1@gmail.com>2018-08-19 21:56:33 +0100
commit3b0271f56013234cf4d967808627cd350f624f38 (patch)
tree39c97fae457df6b0b0fc7be6d30e6cd39b8114e6 /util
parentc17a7856044ebd780de1cc5272210a6a77150dda (diff)
downloadprosody-3b0271f56013234cf4d967808627cd350f624f38.tar.gz
prosody-3b0271f56013234cf4d967808627cd350f624f38.zip
util.stanza + tests: Bail out of loop if we are iterating too far, fixes #981
Diffstat (limited to 'util')
-rw-r--r--util/stanza.lua6
1 files changed, 6 insertions, 0 deletions
diff --git a/util/stanza.lua b/util/stanza.lua
index 11398179..f08baef7 100644
--- a/util/stanza.lua
+++ b/util/stanza.lua
@@ -217,6 +217,7 @@ end
function stanza_mt:maptags(callback)
local tags, curr_tag = self.tags, 1;
local n_children, n_tags = #self, #tags;
+ local max_iterations = n_children + 1;
local i = 1;
while curr_tag <= n_tags and n_tags > 0 do
@@ -236,6 +237,11 @@ function stanza_mt:maptags(callback)
curr_tag = curr_tag + 1;
end
i = i + 1;
+ if i > max_iterations then
+ -- COMPAT: Hopefully temporary guard against #981 while we
+ -- figure out the root cause
+ error("Invalid stanza state! Please report this error.");
+ end
end
return self;
end