Never process empty string and prevent infinite loop
If user provide an empty string as network range, inet_pton will treate it as an IPv6 unspecified address, it seems a bug but I can't confirm. Then empty string will be converted to 0, 0 & 1 always be zero, so it caused dead loop.
This commit is contained in:
parent
070108f78b
commit
79b9b53dbe
1 changed files with 3 additions and 1 deletions
|
@ -195,6 +195,8 @@ class IPNetwork(object):
|
||||||
map(self.add_network, addrs)
|
map(self.add_network, addrs)
|
||||||
|
|
||||||
def add_network(self, addr):
|
def add_network(self, addr):
|
||||||
|
if addr is "":
|
||||||
|
return
|
||||||
block = addr.split('/')
|
block = addr.split('/')
|
||||||
addr_family = is_ip(block[0])
|
addr_family = is_ip(block[0])
|
||||||
addr_len = IPNetwork.ADDRLENGTH[addr_family]
|
addr_len = IPNetwork.ADDRLENGTH[addr_family]
|
||||||
|
@ -207,7 +209,7 @@ class IPNetwork(object):
|
||||||
raise SyntaxError("Not a valid CIDR notation: %s" % addr)
|
raise SyntaxError("Not a valid CIDR notation: %s" % addr)
|
||||||
if len(block) is 1:
|
if len(block) is 1:
|
||||||
prefix_size = 0
|
prefix_size = 0
|
||||||
while ((ip & 1) == 0):
|
while (ip & 1) == 0 and ip is not 0:
|
||||||
ip >>= 1
|
ip >>= 1
|
||||||
prefix_size += 1
|
prefix_size += 1
|
||||||
logging.warn("You did't specify CIDR routing prefix size for %s, "
|
logging.warn("You did't specify CIDR routing prefix size for %s, "
|
||||||
|
|
Loading…
Add table
Reference in a new issue