File tree 2 files changed +8
-2
lines changed
2 files changed +8
-2
lines changed Original file line number Diff line number Diff line change @@ -496,8 +496,11 @@ def set(addr, *family)
496
496
def mask! ( mask )
497
497
case mask
498
498
when String
499
- if mask =~ /\A \d +\z /
499
+ case mask
500
+ when /\A (0|[1-9]+\d *)\z /
500
501
prefixlen = mask . to_i
502
+ when /\A \d +\z /
503
+ raise InvalidPrefixError , "leading zeros in prefix"
501
504
else
502
505
m = IPAddr . new ( mask )
503
506
if m . family != @family
@@ -567,7 +570,7 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC)
567
570
raise AddressFamilyError , "unsupported address family: #{ family } "
568
571
end
569
572
end
570
- prefix , prefixlen = addr . split ( '/' )
573
+ prefix , prefixlen = addr . split ( '/' , 2 )
571
574
if prefix =~ /\A \[ (.*)\] \z /i
572
575
prefix = $1
573
576
family = Socket ::AF_INET6
Original file line number Diff line number Diff line change @@ -91,6 +91,9 @@ def test_s_new
91
91
assert_raise ( IPAddr ::InvalidAddressError ) { IPAddr . new ( "[192.168.1.2]/120" ) }
92
92
assert_raise ( IPAddr ::InvalidAddressError ) { IPAddr . new ( "[2001:200:300::]\n INVALID" ) }
93
93
assert_raise ( IPAddr ::InvalidAddressError ) { IPAddr . new ( "192.168.0.1/32\n INVALID" ) }
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" ) }
94
97
assert_raise ( IPAddr ::InvalidPrefixError ) { IPAddr . new ( "::1/255.255.255.0" ) }
95
98
assert_raise ( IPAddr ::InvalidPrefixError ) { IPAddr . new ( "::1/129" ) }
96
99
assert_raise ( IPAddr ::InvalidPrefixError ) { IPAddr . new ( "192.168.0.1/33" ) }
You can’t perform that action at this time.
0 commit comments