diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2012-07-06 15:13:55 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2012-07-06 15:13:55 (GMT) |
commit | 3c2570caf219fab4fea9d17a5e6bc5cba741b547 (patch) | |
tree | 5fd888334e463de15d5078c1645464753df25db0 /Lib/ipaddress.py | |
parent | 2240ac1eae2dd8674748239af9c61e5ab4faeb2c (diff) | |
download | cpython-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.py | 10 |
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 |