Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e653d4d

Browse files
TV4Funncoghlan
authored andcommitted
bpo-36384: Remove check for leading zeroes in IPv4 addresses (GH-12577)
Stop rejecting IPv4 octets with leading zeroes as ambiguously octal. Plenty of other tools generate decimal IPv4 octets with leading zeroes, so keeping this check hurts interoperability. Patch by Joel Croteau.
1 parent ddbb978 commit e653d4d

3 files changed

Lines changed: 4 additions & 15 deletions

File tree

Lib/ipaddress.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,12 +1165,6 @@ def _parse_octet(cls, octet_str):
11651165
raise ValueError(msg % octet_str)
11661166
# Convert to integer (we know digits are legal)
11671167
octet_int = int(octet_str, 10)
1168-
# Any octets that look like they *might* be written in octal,
1169-
# and which don't look exactly the same in both octal and
1170-
# decimal are rejected as ambiguous
1171-
if octet_int > 7 and octet_str[0] == '0':
1172-
msg = "Ambiguous (octal/decimal) value in %r not permitted"
1173-
raise ValueError(msg % octet_str)
11741168
if octet_int > 255:
11751169
raise ValueError("Octet %d (> 255) not permitted" % octet_int)
11761170
return octet_int

Lib/test/test_ipaddress.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,14 @@ def pickle_test(self, addr):
9292
y = pickle.loads(pickle.dumps(x, proto))
9393
self.assertEqual(y, x)
9494

95+
9596
class CommonTestMixin_v4(CommonTestMixin):
9697

9798
def test_leading_zeros(self):
9899
self.assertInstancesEqual("000.000.000.000", "0.0.0.0")
99100
self.assertInstancesEqual("192.168.000.001", "192.168.0.1")
101+
self.assertInstancesEqual("016.016.016.016", "16.16.16.16")
102+
self.assertInstancesEqual("001.000.008.016", "1.0.8.16")
100103

101104
def test_int(self):
102105
self.assertInstancesEqual(0, "0.0.0.0")
@@ -229,15 +232,6 @@ def assertBadOctet(addr, octet):
229232
assertBadOctet("1.2.3.4::", "4::")
230233
assertBadOctet("1.a.2.3", "a")
231234

232-
def test_octal_decimal_ambiguity(self):
233-
def assertBadOctet(addr, octet):
234-
msg = "Ambiguous (octal/decimal) value in %r not permitted in %r"
235-
with self.assertAddressError(re.escape(msg % (octet, addr))):
236-
ipaddress.IPv4Address(addr)
237-
238-
assertBadOctet("016.016.016.016", "016")
239-
assertBadOctet("001.000.008.016", "008")
240-
241235
def test_octet_length(self):
242236
def assertBadOctet(addr, octet):
243237
msg = "At most 3 characters permitted in %r in %r"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Stop rejecting IPv4 octets for being ambiguously octal. Leading zeros are ignored, and no longer are assumed to specify octal octets. Octets are always decimal numbers. Octets must still be no more than three digits, including leading zeroes.

0 commit comments

Comments
 (0)