changeset 14103:27e97e5b2c16 13.0

util.jid: Fix to reject IPv6 literal hosts without brackets From RFC 7622: > Implementation Note: Reuse of the IP-literal rule from [RFC6874] > implies that IPv6 addresses are enclosed within square brackets (i.e., > beginning with '[' and ending with ']'), , which was not the case with > the definition of the XMPP address format in [RFC3920] but which was > changed in [RFC6122].
author Kim Alvefur <zash@zash.se>
date Sat, 14 Mar 2026 01:16:14 +0100
parents 3e6bb6ffbd43
children a1fb05cbd44e
files spec/util_jid_spec.lua util/jid.lua
diffstat 2 files changed, 3 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/spec/util_jid_spec.lua	Wed Mar 11 16:53:48 2026 +0100
+++ b/spec/util_jid_spec.lua	Sat Mar 14 01:16:14 2026 +0100
@@ -79,6 +79,7 @@
 			test("xmpp:test@example.com", nil, nil, nil);
 			test("xmpp:example.com", nil, nil, nil);
 			test("+123@bridge.example.com)", nil, nil, nil);
+			test("node@2001:db8::50:726f:736f:6479/foo", nil, nil, nil);
 		end);
 		it("should reject invalid arguments", function ()
 			assert.has_error(function () jid.prepped_split(false) end)
--- a/util/jid.lua	Wed Mar 11 16:53:48 2026 +0100
+++ b/util/jid.lua	Sat Mar 14 01:16:14 2026 +0100
@@ -52,7 +52,8 @@
 
 local function valid_ip(ip)
 	local v6 = match(ip, "^%[([%x:.]+)%]$");
-	return net.pton(v6 or ip);
+	local v4 = match(ip, "^%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?$");
+	return (v6 or v4) and net.pton(v6 or v4);
 end
 
 local function prepped_split(jid, strict)