This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author niconorsk
Recipients niconorsk
Date 2019-05-07.22:53:58
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1557269638.8.0.459235898725.issue36845@roundup.psfhosted.org>
In-reply-to
Content
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 "<stdin>", line 1, in <module>
  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
History
Date User Action Args
2019-05-07 22:53:58niconorsksetrecipients: + niconorsk
2019-05-07 22:53:58niconorsksetmessageid: <1557269638.8.0.459235898725.issue36845@roundup.psfhosted.org>
2019-05-07 22:53:58niconorsklinkissue36845 messages
2019-05-07 22:53:58niconorskcreate