| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1649,10 +1649,12 @@ def _ip_int_from_string(cls, ip_str): | |||
| 1649 | 1649 | """ | |
| 1650 | 1650 | if not ip_str: | |
| 1651 | 1651 | raise AddressValueError('Address cannot be empty') | |
| 1652 | - if len(ip_str) > 39: | ||
| 1653 | - msg = ("At most 39 characters expected in " | ||
| 1654 | - f"{ip_str[:14]!r}({len(ip_str)-28} chars elided){ip_str[-14:]!r}") | ||
| 1655 | - raise AddressValueError(msg) | ||
| 1652 | + if len(ip_str) > 45: | ||
| 1653 | + shorten = ip_str | ||
| 1654 | + if len(shorten) > 100: | ||
| 1655 | + shorten = f'{ip_str[:45]}({len(ip_str)-90} chars elided){ip_str[-45:]}' | ||
| 1656 | + raise AddressValueError(f"At most 45 characters expected in " | ||
| 1657 | + f"{shorten!r}") | ||
| 1656 | 1658 | ||
| 1657 | 1659 | # We want to allow more parts than the max to be 'split' | |
| 1658 | 1660 | # to preserve the correct error message when there are | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -391,14 +391,16 @@ def assertBadSplit(addr): | |||
| 391 | 391 | ||
| 392 | 392 | def test_bad_address_split_v6_too_long(self): | |
| 393 | 393 | def assertBadSplit(addr): | |
| 394 | - msg = r"At most 39 characters expected in %s" | ||
| 395 | - with self.assertAddressError(msg, repr(re.escape(addr[:14]))): | ||
| 394 | + msg = r"At most 45 characters expected in '%s" | ||
| 395 | + with self.assertAddressError(msg, re.escape(addr[:45])): | ||
| 396 | 396 | ipaddress.IPv6Address(addr) | |
| 397 | 397 | ||
| 398 | 398 | # Long IPv6 address | |
| 399 | 399 | long_addr = ("0:" * 10000) + "0" | |
| 400 | 400 | assertBadSplit(long_addr) | |
| 401 | 401 | assertBadSplit(long_addr + "%zoneid") | |
| 402 | + assertBadSplit(long_addr + ":255.255.255.255") | ||
| 403 | + assertBadSplit(long_addr + ":ffff:255.255.255.255") | ||
| 402 | 404 | ||
| 403 | 405 | def test_bad_address_split_v6_too_many_parts(self): | |
| 404 | 406 | def assertBadSplit(addr): | |
@@ -2172,6 +2174,11 @@ def testIPv6AddressTooLarge(self): | |||
| 2172 | 2174 | self.assertEqual(ipaddress.ip_address('FFFF::192.0.2.1'), | |
| 2173 | 2175 | ipaddress.ip_address('FFFF::c000:201')) | |
| 2174 | 2176 | ||
| 2177 | + self.assertEqual(ipaddress.ip_address('0000:0000:0000:0000:0000:FFFF:192.168.255.255'), | ||
| 2178 | + ipaddress.ip_address('::ffff:c0a8:ffff')) | ||
| 2179 | + self.assertEqual(ipaddress.ip_address('FFFF:0000:0000:0000:0000:0000:192.168.255.255'), | ||
| 2180 | + ipaddress.ip_address('ffff::c0a8:ffff')) | ||
| 2181 | + | ||
| 2175 | 2182 | self.assertEqual(ipaddress.ip_address('::FFFF:192.0.2.1%scope'), | |
| 2176 | 2183 | ipaddress.ip_address('::FFFF:c000:201%scope')) | |
| 2177 | 2184 | self.assertEqual(ipaddress.ip_address('FFFF::192.0.2.1%scope'), | |
@@ -2184,6 +2191,10 @@ def testIPv6AddressTooLarge(self): | |||
| 2184 | 2191 | ipaddress.ip_address('::FFFF:c000:201%scope')) | |
| 2185 | 2192 | self.assertNotEqual(ipaddress.ip_address('FFFF::192.0.2.1'), | |
| 2186 | 2193 | ipaddress.ip_address('FFFF::c000:201%scope')) | |
| 2194 | + self.assertEqual(ipaddress.ip_address('0000:0000:0000:0000:0000:FFFF:192.168.255.255%scope'), | ||
| 2195 | + ipaddress.ip_address('::ffff:c0a8:ffff%scope')) | ||
| 2196 | + self.assertEqual(ipaddress.ip_address('FFFF:0000:0000:0000:0000:0000:192.168.255.255%scope'), | ||
| 2197 | + ipaddress.ip_address('ffff::c0a8:ffff%scope')) | ||
| 2187 | 2198 | ||
| 2188 | 2199 | def testIPVersion(self): | |
| 2189 | 2200 | self.assertEqual(self.ipv4_address.version, 4) | |
@@ -2568,6 +2579,10 @@ def testCompressIPv6Address(self): | |||
| 2568 | 2579 | '::7:6:5:4:3:2:0': '0:7:6:5:4:3:2:0/128', | |
| 2569 | 2580 | '7:6:5:4:3:2:1::': '7:6:5:4:3:2:1:0/128', | |
| 2570 | 2581 | '0:6:5:4:3:2:1::': '0:6:5:4:3:2:1:0/128', | |
| 2582 | + '0000:0000:0000:0000:0000:0000:255.255.255.255': '::ffff:ffff/128', | ||
| 2583 | + '0000:0000:0000:0000:0000:ffff:255.255.255.255': '::ffff:255.255.255.255/128', | ||
| 2584 | + 'ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255': | ||
| 2585 | + 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128', | ||
| 2571 | 2586 | } | |
| 2572 | 2587 | for uncompressed, compressed in list(test_addresses.items()): | |
| 2573 | 2588 | self.assertEqual(compressed, str(ipaddress.IPv6Interface( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1 @@ | |||
| 1 | + Fix parsing long IPv6 addresses with embedded IPv4 address. | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments