Address 2.2.1 of RFC 4291
Treat `2001:DB8:0:0:8:800:200C:417A` as valid.
This commit is contained in:
parent
6902590784
commit
999bf8d5d6
2 changed files with 11 additions and 16 deletions
|
@ -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
|
||||
|
|
|
@ -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::",
|
||||
|
|
Loading…
Reference in a new issue