# HG changeset patch # User Kim Alvefur # Date 1773447374 -3600 # Node ID 27e97e5b2c161f7e6ed017b6f83a9c64f6d1e96a # Parent 3e6bb6ffbd43f999e51666770e291bbdc341435d 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]. diff -r 3e6bb6ffbd43 -r 27e97e5b2c16 spec/util_jid_spec.lua --- 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) diff -r 3e6bb6ffbd43 -r 27e97e5b2c16 util/jid.lua --- 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)