Comparison

util/stanza.lua @ 9630:bff66c3faceb 0.11

util.stanza: Validate input to clone() (with brief tests)
author Kim Alvefur <zash@zash.se>
date Sat, 17 Nov 2018 15:26:11 +0100
parent 9489:09b873ac7eb8
child 9674:6f97acc4583b
comparison
equal deleted inserted replaced
9628:2fcf517b811e 9630:bff66c3faceb
396 end 396 end
397 397
398 return stanza; 398 return stanza;
399 end 399 end
400 400
401 local function clone(stanza) 401 local function _clone(stanza)
402 local attr, tags = {}, {}; 402 local attr, tags = {}, {};
403 for k,v in pairs(stanza.attr) do attr[k] = v; end 403 for k,v in pairs(stanza.attr) do attr[k] = v; end
404 local old_namespaces, namespaces = stanza.namespaces; 404 local old_namespaces, namespaces = stanza.namespaces;
405 if old_namespaces then 405 if old_namespaces then
406 namespaces = {}; 406 namespaces = {};
408 end 408 end
409 local new = { name = stanza.name, attr = attr, namespaces = namespaces, tags = tags }; 409 local new = { name = stanza.name, attr = attr, namespaces = namespaces, tags = tags };
410 for i=1,#stanza do 410 for i=1,#stanza do
411 local child = stanza[i]; 411 local child = stanza[i];
412 if child.name then 412 if child.name then
413 child = clone(child); 413 child = _clone(child);
414 t_insert(tags, child); 414 t_insert(tags, child);
415 end 415 end
416 t_insert(new, child); 416 t_insert(new, child);
417 end 417 end
418 return setmetatable(new, stanza_mt); 418 return setmetatable(new, stanza_mt);
419 end
420
421 local function clone(stanza)
422 if not is_stanza(stanza) then
423 error("bad argument to clone: expected stanza, got "..type(stanza));
424 end
425 return _clone(stanza);
419 end 426 end
420 427
421 local function message(attr, body) 428 local function message(attr, body)
422 if not body then 429 if not body then
423 return new_stanza("message", attr); 430 return new_stanza("message", attr);