]> source.dussan.org Git - rspamd.git/commitdiff
libutil: Fix parsing of address "IPv6:::1" 2915/head
authorMartin Mares <mj@ucw.cz>
Tue, 4 Jun 2019 16:35:50 +0000 (18:35 +0200)
committerMartin Mares <mj@ucw.cz>
Tue, 4 Jun 2019 16:35:50 +0000 (18:35 +0200)
Dropping of leading colon must be performed after the "IPv6:" prefix
is stripped.

Also fixed a couple of wrong comments.

src/libutil/addr.c

index 7fa634f6f3d6ffc0b9a2d871af2235b1236ea631..4babfb1d2dac6094d45b29c1fa114eb724bf0850 100644 (file)
@@ -510,19 +510,11 @@ rspamd_parse_inet_address_ip6 (const guchar *text, gsize len, gpointer target)
        g_assert (text != NULL);
        g_assert (target != NULL);
 
+       p = text;
        if (len == 0) {
                len = strlen (text);
        }
 
-       /* Ignore trailing semicolon */
-       if (text[0] == ':') {
-               p = text + 1;
-               len--;
-       }
-       else {
-               p = text;
-       }
-
        /* Check IPv6 scope */
        if ((percent = memchr (p, '%', len)) != NULL && percent > p) {
                len = percent - p; /* Ignore scope */
@@ -535,6 +527,12 @@ rspamd_parse_inet_address_ip6 (const guchar *text, gsize len, gpointer target)
                len -= sizeof ("IPv6:") - 1;
        }
 
+       /* Ignore leading colon */
+       if (len > 0 && *p == ':') {
+               p++;
+               len--;
+       }
+
        for (/* void */; len; len--) {
                t = *p++;
 
@@ -580,7 +578,7 @@ rspamd_parse_inet_address_ip6 (const guchar *text, gsize len, gpointer target)
                }
 
                if (++nibbles > 4) {
-                       /* Too many dots */
+                       /* Too many digits */
                        return FALSE;
                }