Software /
code /
prosody
Changeset
9633:28be90eb774a
Merge 0.11->trunk
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 17 Nov 2018 15:48:32 +0100 |
parents | 9629:b7a23136f345 (current diff) 9632:fdefc43bffff (diff) |
children | 9635:fc2266339cd8 |
files | |
diffstat | 3 files changed, 30 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_csi_simple.lua Thu Nov 15 21:55:32 2018 +0000 +++ b/plugins/mod_csi_simple.lua Sat Nov 17 15:48:32 2018 +0100 @@ -48,6 +48,9 @@ module:hook("csi-is-stanza-important", function (event) local stanza = event.stanza; + if not st.is_stanza(stanza) then + return true; + end local st_name = stanza.name; if not st_name then return false; end local st_type = stanza.attr.type; @@ -82,8 +85,10 @@ pump:flush(); send(stanza); else - stanza = st.clone(stanza); - stanza:add_direct_child(st.stanza("delay", {xmlns = "urn:xmpp:delay", from = bare_jid, stamp = dt.datetime()})); + if st.is_stanza(stanza) then + stanza = st.clone(stanza); + stanza:add_direct_child(st.stanza("delay", {xmlns = "urn:xmpp:delay", from = bare_jid, stamp = dt.datetime()})); + end pump:push(stanza); end return true;
--- a/spec/util_stanza_spec.lua Thu Nov 15 21:55:32 2018 +0000 +++ b/spec/util_stanza_spec.lua Sat Nov 17 15:48:32 2018 +0100 @@ -346,4 +346,18 @@ end, "Invalid stanza"); end); end); + + describe("#clone", function () + it("works", function () + local s = st.message({type="chat"}, "Hello"):reset(); + local c = st.clone(s); + assert.same(s, c); + end); + + it("works", function () + assert.has_error(function () + st.clone("this is not a stanza"); + end); + end); + end); end);
--- a/util/stanza.lua Thu Nov 15 21:55:32 2018 +0000 +++ b/util/stanza.lua Sat Nov 17 15:48:32 2018 +0100 @@ -398,7 +398,7 @@ return stanza; end -local function clone(stanza) +local function _clone(stanza) local attr, tags = {}, {}; for k,v in pairs(stanza.attr) do attr[k] = v; end local old_namespaces, namespaces = stanza.namespaces; @@ -410,7 +410,7 @@ for i=1,#stanza do local child = stanza[i]; if child.name then - child = clone(child); + child = _clone(child); t_insert(tags, child); end t_insert(new, child); @@ -418,6 +418,13 @@ return setmetatable(new, stanza_mt); end +local function clone(stanza) + if not is_stanza(stanza) then + error("bad argument to clone: expected stanza, got "..type(stanza)); + end + return _clone(stanza); +end + local function message(attr, body) if not body then return new_stanza("message", attr);