ejabberd2prosody: Added a lot more type checks to ensure XML data has proper data...
authorWaqas Hussain <waqas20@gmail.com>
Sat, 17 Sep 2011 15:25:11 +0000 (20:25 +0500)
committerWaqas Hussain <waqas20@gmail.com>
Sat, 17 Sep 2011 15:25:11 +0000 (20:25 +0500)
tools/ejabberd2prosody.lua

index 486b8c4ae3a7a62791af9d7ab46998dd76b5e08f..545bd9226f790eccd2689ab09a272a78b065c8e6 100755 (executable)
@@ -26,15 +26,22 @@ local dm = require "util.datamanager"
 dm.set_data_path("data");
 
 function build_stanza(tuple, stanza)
+       assert(type(tuple) == "table", "XML node is of unexpected type: "..type(tuple));
        if tuple[1] == "xmlelement" then
+               assert(type(tuple[2]) == "string", "element name has type: "..type(tuple[2]));
+               assert(type(tuple[3]) == "table", "element attribute array has type: "..type(tuple[3]));
+               assert(type(tuple[4]) == "table", "element children array has type: "..type(tuple[4]));
                local name = tuple[2];
                local attr = {};
-               for _, a in ipairs(tuple[3]) do attr[a[1]] = a[2]; end
+               for _, a in ipairs(tuple[3]) do
+                       if type(a[1]) == "string" and type(a[2]) == "string" then attr[a[1]] = a[2]; end
+               end
                local up;
                if stanza then stanza:tag(name, attr); up = true; else stanza = st.stanza(name, attr); end
                for _, a in ipairs(tuple[4]) do build_stanza(a, stanza); end
                if up then stanza:up(); else return stanza end
        elseif tuple[1] == "xmlcdata" then
+               assert(type(tuple[2]) == "string", "XML CDATA has unexpected type: "..type(tuple[2]));
                stanza:text(tuple[2]);
        else
                error("unknown element type: "..serialize(tuple));