diff options
author | Waqas Hussain <waqas20@gmail.com> | 2014-10-08 15:56:11 -0400 |
---|---|---|
committer | Waqas Hussain <waqas20@gmail.com> | 2014-10-08 15:56:11 -0400 |
commit | 39d305e2ade0c259e6c93de0dd4aedce55b51057 (patch) | |
tree | de659a2546171cd51d5d4509810e59f095b12c00 /util/stanza.lua | |
parent | 121b64847546320d919c0fb4e8997e2d6813b714 (diff) | |
download | prosody-39d305e2ade0c259e6c93de0dd4aedce55b51057.tar.gz prosody-39d305e2ade0c259e6c93de0dd4aedce55b51057.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.lua | 15 |
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 = { ["'"] = "'", ["\""] = """, ["<"] = "<", [">"] = ">", ["&"] = "&" }; - function xml_escape(str) return (s_gsub(str, "['&<>\"]", escape_table)); end + local escape_table = { + ["'"] = "'"; + ['"'] = """; + ["<"] = "<"; + [">"] = ">"; + ["&"] = "&"; + -- 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"] = "	"; + ["\n"] = "
"; + ["\r"] = "
"; + }; + function xml_escape(str) return (s_gsub(str, "['&<>\"\t\n\r]", escape_table)); end _M.xml_escape = xml_escape; end |