Changeset

12190:3616128cd2e3

util.jid: Explicitly check for nil rather than falsy A boolean false should blow up.
author Kim Alvefur <zash@zash.se>
date Sat, 15 Jan 2022 16:25:25 +0100
parents 12189:82c8e855c850
children 12191:8b57362f1176
files spec/util_jid_spec.lua util/jid.lua
diffstat 2 files changed, 25 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/spec/util_jid_spec.lua	Sat Jan 15 15:40:29 2022 +0100
+++ b/spec/util_jid_spec.lua	Sat Jan 15 16:25:25 2022 +0100
@@ -13,6 +13,11 @@
 			assert.are.equal(jid.join(nil, nil, "c"), nil, "invalid JID is nil");
 			assert.are.equal(jid.join("a", nil, "c"), nil, "invalid JID is nil");
 		end);
+		it("should reject invalid arguments", function ()
+			assert.has_error(function () jid.join(false, "bork", nil) end)
+			assert.has_error(function () jid.join(nil, "bork", false) end)
+			assert.has_error(function () jid.join(false, false, false) end)
+		end)
 	end);
 	describe("#split()", function()
 		it("should work", function()
@@ -38,6 +43,9 @@
 			test("@server/resource", nil, nil, nil);
 			test("@/resource", nil, nil, nil);
 		end);
+		it("should reject invalid arguments", function ()
+			assert.has_error(function () jid.split(false) end)
+		end)
 	end);
 
 
@@ -59,6 +67,9 @@
 			assert.are.equal(jid.bare("user@@host/resource"), nil, "invalid JID is nil");
 			assert.are.equal(jid.bare("user@host/"), nil, "invalid JID is nil");
 		end);
+		it("should reject invalid arguments", function ()
+			assert.has_error(function () jid.bare(false) end)
+		end)
 	end);
 
 	describe("#compare()", function()
--- a/util/jid.lua	Sat Jan 15 15:40:29 2022 +0100
+++ b/util/jid.lua	Sat Jan 15 16:25:25 2022 +0100
@@ -32,18 +32,18 @@
 -- luacheck: std none
 
 local function split(jid)
-	if not jid then return; end
+	if jid == nil then return; end
 	local node, nodepos = match(jid, "^([^@/]+)@()");
 	local host, hostpos = match(jid, "^([^@/]+)()", nodepos);
-	if node and not host then return nil, nil, nil; end
+	if node ~= nil and host == nil then return nil, nil, nil; end
 	local resource = match(jid, "^/(.+)$", hostpos);
-	if (not host) or ((not resource) and #jid >= hostpos) then return nil, nil, nil; end
+	if (host == nil) or ((resource == nil) and #jid >= hostpos) then return nil, nil, nil; end
 	return node, host, resource;
 end
 
 local function bare(jid)
 	local node, host = split(jid);
-	if node and host then
+	if node ~= nil and host ~= nil then
 		return node.."@"..host;
 	end
 	return host;
@@ -51,31 +51,31 @@
 
 local function prepped_split(jid, strict)
 	local node, host, resource = split(jid);
-	if host and host ~= "." then
+	if host ~= nil and host ~= "." then
 		if sub(host, -1, -1) == "." then -- Strip empty root label
 			host = sub(host, 1, -2);
 		end
 		host = nameprep(host, strict);
-		if not host then return; end
-		if node then
+		if host == nil then return; end
+		if node ~= nil then
 			node = nodeprep(node, strict);
-			if not node then return; end
+			if node == nil then return; end
 		end
-		if resource then
+		if resource ~= nil then
 			resource = resourceprep(resource, strict);
-			if not resource then return; end
+			if resource == nil then return; end
 		end
 		return node, host, resource;
 	end
 end
 
 local function join(node, host, resource)
-	if not host then return end
-	if node and resource then
+	if host == nil then return end
+	if node ~= nil and resource ~= nil then
 		return node.."@"..host.."/"..resource;
-	elseif node then
+	elseif node ~= nil then
 		return node.."@"..host;
-	elseif resource then
+	elseif resource ~= nil then
 		return host.."/"..resource;
 	end
 	return host;