util/jid.lua
changeset 11060 0b0a42542456
parent 10362 a77d9b3885bb
child 12194 3616128cd2e3
--- a/util/jid.lua	Fri Aug 28 18:43:37 2020 +0200
+++ b/util/jid.lua	Fri Aug 28 18:44:02 2020 +0200
@@ -22,7 +22,11 @@
 	["@"] = "\\40"; ["\\"] = "\\5c";
 };
 local unescapes = {};
-for k,v in pairs(escapes) do unescapes[v] = k; end
+local backslash_escapes = {};
+for k,v in pairs(escapes) do
+	unescapes[v] = k;
+	backslash_escapes[v] = v:gsub("\\", escapes)
+end
 
 local _ENV = nil;
 -- luacheck: std none
@@ -107,7 +111,7 @@
 	return (select(3, split(jid)));
 end
 
-local function escape(s) return s and (s:gsub(".", escapes)); end
+local function escape(s) return s and (s:gsub("\\%x%x", backslash_escapes):gsub("[\"&'/:<>@ ]", escapes)); end
 local function unescape(s) return s and (s:gsub("\\%x%x", unescapes)); end
 
 return {