Changeset

8187:4d83876aac3e

MUC: Reject whitespace-only nicknames (fixes #337)
author Kim Alvefur <zash@zash.se>
date Fri, 21 Jul 2017 00:07:34 +0200
parents 8186:becb593ed86d
children 8188:8c524b7c9017
files plugins/muc/muc.lib.lua
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/muc/muc.lib.lua	Fri Aug 04 18:52:15 2017 +0100
+++ b/plugins/muc/muc.lib.lua	Fri Jul 21 00:07:34 2017 +0200
@@ -435,6 +435,13 @@
 						self._occupants[current_nick].sessions[from] = pr;
 						self:broadcast_presence(pr, from);
 					else -- change nick
+						-- a MUC service MUST NOT allow empty or invisible Room Nicknames
+						-- (i.e., Room Nicknames that consist only of one or more space characters).
+						if not select(3, jid_split(nick)):find("[^ ]") then -- resourceprep turns all whitespace into 0x20
+							module:log("debug", "Rejecting invisible nickname");
+							origin.send(st.error_reply(stanza, "cancel", "not-allowed"));
+							return;
+						end
 						local occupant = self._occupants[current_nick];
 						local is_multisession = next(occupant.sessions, next(occupant.sessions));
 						if self._occupants[to] or is_multisession then
@@ -467,6 +474,13 @@
 				--	self:handle_to_occupant(origin, stanza); -- resend available
 				--end
 			else -- enter room
+				-- a MUC service MUST NOT allow empty or invisible Room Nicknames
+				-- (i.e., Room Nicknames that consist only of one or more space characters).
+				if not select(3, jid_split(nick)):find("[^ ]") then -- resourceprep turns all whitespace into 0x20
+						module:log("debug", "Rejecting invisible nickname");
+						origin.send(st.error_reply(stanza, "cancel", "not-allowed"));
+						return;
+				end
 				local new_nick = to;
 				local is_merge;
 				if self._occupants[to] then