# HG changeset patch # User Waqas Hussain # Date 1412798171 14400 # Node ID 6e67c73f730cb01d6129418ac2b22e8a8b55546e # Parent 460584257cc97f2d3dee22041b259802b3412739 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. diff -r 460584257cc9 -r 6e67c73f730c util/stanza.lua --- a/util/stanza.lua Sun Oct 05 14:28:40 2014 +0200 +++ b/util/stanza.lua Wed Oct 08 15:56:11 2014 -0400 @@ -202,8 +202,19 @@ 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