summaryrefslogtreecommitdiffstats
path: root/Lib/ipaddress.py
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2012-07-06 15:13:55 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2012-07-06 15:13:55 (GMT)
commit3c2570caf219fab4fea9d17a5e6bc5cba741b547 (patch)
tree5fd888334e463de15d5078c1645464753df25db0 /Lib/ipaddress.py
parent2240ac1eae2dd8674748239af9c61e5ab4faeb2c (diff)
downloadcpython-3c2570caf219fab4fea9d17a5e6bc5cba741b547.zip
cpython-3c2570caf219fab4fea9d17a5e6bc5cba741b547.tar.gz
cpython-3c2570caf219fab4fea9d17a5e6bc5cba741b547.tar.bz2
Issue 14814: Better handling of cases where octet/hextet parsing fails, including ensuring that tracebacks are still clean even when calling class constructors directly
Diffstat (limited to 'Lib/ipaddress.py')
-rw-r--r--Lib/ipaddress.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index 05ea453..352c9b8 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -1024,7 +1024,7 @@ class _BaseV4:
try:
packed_ip = (packed_ip << 8) | self._parse_octet(oc)
except ValueError:
- raise AddressValueError(ip_str)
+ raise AddressValueError(ip_str) from None
return packed_ip
def _parse_octet(self, octet_str):
@@ -1041,6 +1041,7 @@ class _BaseV4:
"""
# Whitelist the characters, since int() allows a lot of bizarre stuff.
+ # Higher level wrappers convert these to more informative errors
if not self._DECIMAL_DIGITS.issuperset(octet_str):
raise ValueError
octet_int = int(octet_str, 10)
@@ -1497,7 +1498,7 @@ class _BaseV6:
[None])
except ValueError:
# Can't have more than one '::'
- raise AddressValueError(ip_str)
+ raise AddressValueError(ip_str) from None
# parts_hi is the number of parts to copy from above/before the '::'
# parts_lo is the number of parts to copy from below/after the '::'
@@ -1538,7 +1539,7 @@ class _BaseV6:
ip_int |= self._parse_hextet(parts[i])
return ip_int
except ValueError:
- raise AddressValueError(ip_str)
+ raise AddressValueError(ip_str) from None
def _parse_hextet(self, hextet_str):
"""Convert an IPv6 hextet string into an integer.
@@ -1555,8 +1556,11 @@ class _BaseV6:
"""
# Whitelist the characters, since int() allows a lot of bizarre stuff.
+ # Higher level wrappers convert these to more informative errors
if not self._HEX_DIGITS.issuperset(hextet_str):
raise ValueError
+ if len(hextet_str) > 4:
+ raise ValueError
hextet_int = int(hextet_str, 16)
if hextet_int > 0xFFFF:
raise ValueError