Issue 36845: ipaddres.IPv4Network and ipaddress.IPv6Network tuple construction will accept out of valid range prefixlen (original) (raw)
When using the tuple-form of constructing IPv4Network and IPv6Network will accept prefixlen outside of the normal allowed ranges.
Example:
import ipaddress ipaddress.IPv4Network(('172.21.1.0', 400)) IPv4Network('172.21.1.0/400')
If given a negative number, it will error but not with a particularly useful error:
x = ipaddress.IPv4Network(('172.21.1.0', -1)) Traceback (most recent call last): File "", line 1, in File "/usr/lib64/python3.7/ipaddress.py", line 1532, in init self.netmask, self._prefixlen = self._make_netmask(mask) File "/usr/lib64/python3.7/ipaddress.py", line 1112, in _make_netmask netmask = IPv4Address(cls._ip_int_from_prefix(prefixlen)) File "/usr/lib64/python3.7/ipaddress.py", line 444, in _ip_int_from_prefix return cls._ALL_ONES ^ (cls._ALL_ONES >> prefixlen) ValueError: negative shift count
Looking at the code, I think all that is needed is a range check within the respective _make_netmask methods in _BaseV4 and _BaseV6 classes