Skip to content

Commit 3ea2046

Browse files
authored
Merge pull request #17 from jeremyevans/bug-15832
Fix for Ruby Bug 15832
2 parents 2426b56 + f49d2d4 commit 3ea2046

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

lib/ipaddr.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -496,8 +496,11 @@ def set(addr, *family)
496496
def mask!(mask)
497497
case mask
498498
when String
499-
if mask =~ /\A\d+\z/
499+
case mask
500+
when /\A(0|[1-9]+\d*)\z/
500501
prefixlen = mask.to_i
502+
when /\A\d+\z/
503+
raise InvalidPrefixError, "leading zeros in prefix"
501504
else
502505
m = IPAddr.new(mask)
503506
if m.family != @family
@@ -567,7 +570,7 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC)
567570
raise AddressFamilyError, "unsupported address family: #{family}"
568571
end
569572
end
570-
prefix, prefixlen = addr.split('/')
573+
prefix, prefixlen = addr.split('/', 2)
571574
if prefix =~ /\A\[(.*)\]\z/i
572575
prefix = $1
573576
family = Socket::AF_INET6

test/test_ipaddr.rb

+3
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ def test_s_new
9191
assert_raise(IPAddr::InvalidAddressError) { IPAddr.new("[192.168.1.2]/120") }
9292
assert_raise(IPAddr::InvalidAddressError) { IPAddr.new("[2001:200:300::]\nINVALID") }
9393
assert_raise(IPAddr::InvalidAddressError) { IPAddr.new("192.168.0.1/32\nINVALID") }
94+
assert_raise(IPAddr::InvalidAddressError) { IPAddr.new("192.168.0.1/32/20") }
95+
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("192.168.0.1/032") }
96+
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("::1/0128") }
9497
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("::1/255.255.255.0") }
9598
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("::1/129") }
9699
assert_raise(IPAddr::InvalidPrefixError) { IPAddr.new("192.168.0.1/33") }

0 commit comments

Comments
 (0)