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 parts = str.split(':');
|
||||||
var missing = 8 - parts.length;
|
var missing = 8 - parts.length;
|
||||||
var start = offset;
|
var start = offset;
|
||||||
var len = parts.length;
|
var colon = false;
|
||||||
var i = 0;
|
var i, word;
|
||||||
var word;
|
|
||||||
|
|
||||||
assert(missing >= 0, 'IPv6 address is too long.');
|
assert(missing >= 0, 'IPv6 address is too long.');
|
||||||
assert(parts.length >= 2, 'Not an IPv6 address.');
|
assert(parts.length >= 2, 'Not an IPv6 address.');
|
||||||
|
|
||||||
if (parts[0].length === 0) {
|
for (i = 0; i < parts.length; i++) {
|
||||||
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++) {
|
|
||||||
word = parts[i];
|
word = parts[i];
|
||||||
|
|
||||||
if (word.length === 0) {
|
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;
|
missing += 1;
|
||||||
|
|
||||||
// Eat extra colons.
|
// Eat extra colons.
|
||||||
// e.g. :::0
|
// e.g. :::0
|
||||||
while (i + 1 < len) {
|
while (i + 1 < parts.length) {
|
||||||
word = parts[i + 1];
|
word = parts[i + 1];
|
||||||
if (word.length !== 0)
|
if (word.length !== 0)
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user