Address 2.2.1 of RFC 4291

Treat `2001:DB8:0:0:8:800:200C:417A` as valid.
This commit is contained in:
0x1eef 2023-09-22 01:20:52 -03:00
parent 6902590784
commit 999bf8d5d6
2 changed files with 11 additions and 16 deletions

View file

@ -30,28 +30,20 @@ isinetaddr6(const char *str)
char new_str[MAX_STRLEN];
return isinetaddr6(expand(str, len, new_str, i));
} else if (str[i] == SEP) {
if (digitlen < MAX_DIGITLEN) {
return 0;
} else {
digitlen = 0;
hextets++;
}
digitlen = 0;
} else if (isxdigit(str[i])) {
if (digitlen == MAX_DIGITLEN) {
digitlen++;
hexdigits++;
if (digitlen > MAX_DIGITLEN) {
return 0;
} else {
digitlen++;
hexdigits++;
} else if (str[i-1] == SEP) {
hextets++;
}
} else {
return 0;
}
}
if (hextets == MAX_HEXTETS) {
return hexdigits <= MAX_HEXDIGITS && digitlen == MAX_DIGITLEN;
} else {
return 0;
}
return hextets == MAX_HEXTETS && hexdigits <= MAX_HEXDIGITS;
}
static int

View file

@ -12,6 +12,9 @@ const char *valid[] = {
"1234:5678:9abc:def0:face:face:b00c:0ffe",
"2001:19f0:5401:0000:0000:ffff:1e61:face",
"dead:beef:cafe:babe:affe:8a2e:0370:7334",
"2001:DB8:0:0:8:800:200C:417A",
"0000:0000:0000:0000:0000:0000:0000:0",
"FEDC:BA98:7654:3210:FEDC:BA98:7654:3210",
/* valid IPv6 (double colon) */
"fe80::c001:a0ff:fe12:3456",
@ -34,8 +37,8 @@ const char *valid[] = {
const char *invalid[] = {
/* invalid IPv6 (single colon) */
"0000:0000:0000:0000:0000:0000:0000:000Z",
"0000:0000:0000:0000:0000:0000:0000:0",
"0000:0000:0000:0000:0000:0000:0000:",
"2001:DB8:0:Z:8:800:200C:417A",
/* invalid IPv6 (double colon) */
":::", "2001:::1", "2001:::1::",