ip: less strict parsing.
This commit is contained in:
parent
b51554d765
commit
8ac673d36e
@ -224,36 +224,24 @@ IP.parseV6 = function parseV6(str, buf, offset) {
|
||||
var parts = str.split(':');
|
||||
var missing = 8 - parts.length;
|
||||
var start = offset;
|
||||
var len = parts.length;
|
||||
var i = 0;
|
||||
var word;
|
||||
var colon = false;
|
||||
var i, word;
|
||||
|
||||
assert(missing >= 0, 'IPv6 address is too long.');
|
||||
assert(parts.length >= 2, 'Not an IPv6 address.');
|
||||
|
||||
if (parts[0].length === 0) {
|
||||
assert(parts[1].length === 0,
|
||||
'Empty leading colon in IPv6 address.');
|
||||
missing += 1;
|
||||
i++;
|
||||
} else if (parts[len - 1].length === 0) {
|
||||
assert(parts[len - 2].length === 0,
|
||||
'Empty trailing colon in IPv6 address.');
|
||||
missing += 1;
|
||||
len--;
|
||||
}
|
||||
|
||||
for (; i < len; i++) {
|
||||
for (i = 0; i < parts.length; i++) {
|
||||
word = parts[i];
|
||||
|
||||
if (word.length === 0) {
|
||||
assert(missing > 0, 'Overuse of double colon in IPv6 address.');
|
||||
assert(!colon, 'Overuse of double colon in IPv6 address.');
|
||||
|
||||
colon = true;
|
||||
missing += 1;
|
||||
|
||||
// Eat extra colons.
|
||||
// e.g. :::0
|
||||
while (i + 1 < len) {
|
||||
while (i + 1 < parts.length) {
|
||||
word = parts[i + 1];
|
||||
if (word.length !== 0)
|
||||
break;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user