# HG changeset patch # User Kim Alvefur # Date 1642260325 -3600 # Node ID 3616128cd2e31b23fda642a88cf1f94cdee4ca7a # Parent 82c8e855c85067f2145db38ad3e582fbf579866c util.jid: Explicitly check for nil rather than falsy A boolean false should blow up. diff -r 82c8e855c850 -r 3616128cd2e3 spec/util_jid_spec.lua --- 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() diff -r 82c8e855c850 -r 3616128cd2e3 util/jid.lua --- 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;