commit e68ea4e: libutil: Fix parsing of address "IPv6:::1"

Martin Mares mj at ucw.cz
Sun Jun 9 08:42:04 UTC 2019


Author: Martin Mares
Date: 2019-06-04 18:35:50 +0200
URL: https://github.com/rspamd/rspamd/commit/e68ea4ea38376ba0eedf36578c3499159e675c90 (refs/pull/2915/head)

libutil: Fix parsing of address "IPv6:::1"
Dropping of leading colon must be performed after the "IPv6:" prefix
is stripped.

Also fixed a couple of wrong comments.

---
 src/libutil/addr.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/libutil/addr.c b/src/libutil/addr.c
index 7fa634f6f..4babfb1d2 100644
--- a/src/libutil/addr.c
+++ b/src/libutil/addr.c
@@ -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;
 		}
 


More information about the Commits mailing list