109 lines
3.0 KiB
HTML
109 lines
3.0 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script src="resources/utilities.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
description("Canonicalization of IPv4 addresses.");
|
|
|
|
cases = [
|
|
[".", ""],
|
|
|
|
// Regular IP addresses in different bases.
|
|
["192.168.0.1", "192.168.0.1"],
|
|
["0300.0250.00.01", "192.168.0.1"],
|
|
["0xC0.0Xa8.0x0.0x1", "192.168.0.1"],
|
|
|
|
// Non-IP addresses due to invalid characters.
|
|
["192.168.9.com", ""],
|
|
|
|
// Invalid characters for the base should be rejected.
|
|
["19a.168.0.1", ""],
|
|
["0308.0250.00.01", ""],
|
|
["0xCG.0xA8.0x0.0x1", ""],
|
|
|
|
// If there are not enough components, the last one should fill them out.
|
|
["192", "0.0.0.192"],
|
|
["0xC0a80001", "192.168.0.1"],
|
|
["030052000001", "192.168.0.1"],
|
|
["000030052000001", "192.168.0.1"],
|
|
["192.168", "192.0.0.168"],
|
|
["192.0x00A80001", "192.168.0.1"],
|
|
["0xc0.052000001", "192.168.0.1"],
|
|
["192.168.1", "192.168.0.1"],
|
|
|
|
// Too many components means not an IP address.
|
|
["192.168.0.0.1", ""],
|
|
|
|
// We allow a single trailing dot.
|
|
["192.168.0.1.", "192.168.0.1"],
|
|
["192.168.0.1. hello", ""],
|
|
["192.168.0.1..", ""],
|
|
|
|
// Two dots in a row means not an IP address.
|
|
["192.168..1", ""],
|
|
|
|
// Any numerical overflow should be marked as BROKEN.
|
|
["0x100.0", ""],
|
|
["0x100.0.0", ""],
|
|
["0x100.0.0.0", ""],
|
|
["0.0x100.0.0", ""],
|
|
["0.0.0x100.0", ""],
|
|
["0.0.0.0x100", ""],
|
|
["0.0.0x10000", ""],
|
|
["0.0x1000000", ""],
|
|
["0x100000000", ""],
|
|
|
|
// Repeat the previous tests, minus 1, to verify boundaries.
|
|
["0xFF.0", "255.0.0.0"],
|
|
["0xFF.0.0", "255.0.0.0"],
|
|
["0xFF.0.0.0", "255.0.0.0"],
|
|
["0.0xFF.0.0", "0.255.0.0"],
|
|
["0.0.0xFF.0", "0.0.255.0"],
|
|
["0.0.0.0xFF", "0.0.0.255"],
|
|
["0.0.0xFFFF", "0.0.255.255"],
|
|
["0.0xFFFFFF", "0.255.255.255"],
|
|
["0xFFFFFFFF", "255.255.255.255"],
|
|
|
|
// Old trunctations tests. They're all "BROKEN" now.
|
|
["276.256.0xf1a2.077777", ""],
|
|
["192.168.0.257", ""],
|
|
["192.168.0xa20001", ""],
|
|
["192.015052000001", ""],
|
|
["0X12C0a80001", ""],
|
|
["276.1.2", ""],
|
|
|
|
// Spaces should be rejected.
|
|
["192.168.0.1 hello", ""],
|
|
|
|
// Very large numbers.
|
|
["0000000000000300.0x00000000000000fF.00000000000000001", "192.255.0.1"],
|
|
["0000000000000300.0xffffffffFFFFFFFF.3022415481470977", ""],
|
|
|
|
// A number has no length limit, but long numbers can still overflow.
|
|
["00000000000000000001", "0.0.0.1"],
|
|
["0000000000000000100000000000000001", ""],
|
|
|
|
// If a long component is non-numeric, it's a hostname, *not* a broken IP.
|
|
["0.0.0.000000000000000000z", ""],
|
|
["0.0.0.100000000000000000z", ""],
|
|
|
|
// Truncation of all zeros should still result in 0.
|
|
["0.00.0x.0x0", "0.0.0.0"]
|
|
];
|
|
|
|
for (var i = 0; i < cases.length; ++i) {
|
|
test_vector = cases[i][0];
|
|
expected_result = cases[i][1];
|
|
if (expected_result === "")
|
|
expected_result = test_vector.toLowerCase();
|
|
shouldBe("canonicalize('http://" + test_vector + "/')",
|
|
"'http://" + expected_result + "/'");
|
|
}
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|