rspamd_parse_inet_address_ip6 (const guchar *text, gsize len, gpointer target)
{
guchar t, *zero = NULL, *s, *d, *addr = target;
- const guchar *p, *digit = NULL;
+ const guchar *p, *digit = NULL, *percent;
gsize len4 = 0;
guint n = 8, nibbles = 0, word = 0;
p = text;
}
+ /* Check IPv6 scope */
+ if ((percent = memchr (p, '%', len)) != NULL && percent > p) {
+ len = percent - p; /* Ignore scope */
+ }
+
for (/* void */; len; len--) {
t = *p++;
context("Inet addr check functions", function()
local ffi = require("ffi")
-
+
ffi.cdef[[
typedef struct rspamd_inet_addr_s rspamd_inet_addr_t;
bool rspamd_parse_inet_address (rspamd_inet_addr_t **target,
{'256.1.1.1', false},
{'/tmp/socket', true},
{'./socket', true},
+ {'[fe80::f919:8b26:ff93:3092%5]', true},
+ {'[fe80::f919:8b26:ff93:3092]', true},
}
for i,c in ipairs(cases) do