util.stanza: Escape newlines and tabs (\r\n\t) when serializing stanzas. \r\n transfo...
authorWaqas Hussain <waqas20@gmail.com>
Wed, 8 Oct 2014 19:56:11 +0000 (15:56 -0400)
committerWaqas Hussain <waqas20@gmail.com>
Wed, 8 Oct 2014 19:56:11 +0000 (15:56 -0400)
util/stanza.lua

index 7c21421083d57daafbcf2ad807c3d7b7166c36a5..2fcf2c79195eb6317614be46bf025ca4727e704f 100644 (file)
@@ -202,8 +202,19 @@ end
 
 local xml_escape
 do
-       local escape_table = { ["'"] = "&apos;", ["\""] = "&quot;", ["<"] = "&lt;", [">"] = "&gt;", ["&"] = "&amp;" };
-       function xml_escape(str) return (s_gsub(str, "['&<>\"]", escape_table)); end
+       local escape_table = {
+               ["'"] = "&apos;";
+               ['"'] = "&quot;";
+               ["<"] = "&lt;";
+               [">"] = "&gt;";
+               ["&"] = "&amp;";
+               -- escape this whitespace because [\r\n\t] change into spaces in attributes
+               -- and \r\n changes into \n in text, and we want to preserve original bytes
+               ["\t"] = "&#x9;";
+               ["\n"] = "&#xA;";
+               ["\r"] = "&#xD;";
+       };
+       function xml_escape(str) return (s_gsub(str, "['&<>\"\t\n\r]", escape_table)); end
        _M.xml_escape = xml_escape;
 end