ip: less strict parsing.

This commit is contained in:
Christopher Jeffrey 2016-12-19 03:17:26 -08:00
parent b51554d765
commit 8ac673d36e
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD

View File

@ -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;