util/stanza.lua
changeset 5414 efec29eb4cdd
parent 5090 61c7c53c06d5
child 5424 7318527c6dea
--- a/util/stanza.lua	Wed Apr 03 08:14:55 2013 +0100
+++ b/util/stanza.lua	Wed Apr 03 13:38:27 2013 +0100
@@ -153,7 +153,7 @@
 	local n_children, n_tags = #self, #tags;
 	
 	local i = 1;
-	while curr_tag <= n_tags do
+	while curr_tag <= n_tags and n_tags > 0 do
 		if self[i] == tags[curr_tag] then
 			local ret = callback(self[i]);
 			if ret == nil then
@@ -161,13 +161,15 @@
 				t_remove(tags, curr_tag);
 				n_children = n_children - 1;
 				n_tags = n_tags - 1;
+				i = i - 1;
+				curr_tag = curr_tag - 1;
 			else
 				self[i] = ret;
 				tags[i] = ret;
 			end
-			i = i + 1;
 			curr_tag = curr_tag + 1;
 		end
+		i = i + 1;
 	end
 	return self;
 end