aboutsummaryrefslogtreecommitdiffstats
path: root/util/stanza.lua
diff options
context:
space:
mode:
authorWaqas Hussain <waqas20@gmail.com>2014-10-08 15:56:11 -0400
committerWaqas Hussain <waqas20@gmail.com>2014-10-08 15:56:11 -0400
commitb2ef2d1e60d73cb2ebf89cc21a9aed87e530307c (patch)
treede659a2546171cd51d5d4509810e59f095b12c00 /util/stanza.lua
parentd8136ff52d2eb03397dfaa0df8e23e9047744429 (diff)
downloadprosody-b2ef2d1e60d73cb2ebf89cc21a9aed87e530307c.tar.gz
prosody-b2ef2d1e60d73cb2ebf89cc21a9aed87e530307c.zip
util.stanza: Escape newlines and tabs (\r\n\t) when serializing stanzas. \r\n transforms into \n otherwise, and \r\n\t in attributes transforms into spaces.
Diffstat (limited to 'util/stanza.lua')
-rw-r--r--util/stanza.lua15
1 files changed, 13 insertions, 2 deletions
diff --git a/util/stanza.lua b/util/stanza.lua
index 7c214210..2fcf2c79 100644
--- a/util/stanza.lua
+++ b/util/stanza.lua
@@ -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