File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -617,7 +617,7 @@ def zone_id
617617 def zone_id = ( zid )
618618 if @family == Socket ::AF_INET6
619619 case zid
620- when nil , /\A %( \w +) \z /
620+ when nil , /\A %[-0-9A-Za-z._~]+ \z /
621621 @zone_id = zid
622622 else
623623 raise InvalidAddressError , "invalid zone identifier for address"
@@ -758,7 +758,7 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC)
758758 family = Socket ::AF_INET6
759759 bracketed = true
760760 end
761- if prefix =~ /\A (.*)(%\w +)\z /
761+ if prefix =~ /\A (.*)(%[-0-9A-Za-z._~] +)\z /
762762 prefix = $1
763763 zone_id = $2
764764 family = Socket ::AF_INET6
Original file line number Diff line number Diff line change @@ -302,6 +302,9 @@ def test_to_s_with_zone_id
302302 assert_equal ( "::192.168.1.2%eth0" , IPAddr . new ( "::192.168.1.2%eth0" ) . to_s )
303303 assert_equal ( "fe80::1%0ab" , IPAddr . new ( "fe80::1%0ab" ) . to_s )
304304 assert_equal ( "fe80::1%0012" , IPAddr . new ( "fe80::1%0012" ) . to_s )
305+ assert_equal ( "fe80::1%eth0.100" , IPAddr . new ( "fe80::1%eth0.100" ) . to_s )
306+ assert_equal ( "fe80::1%br-lan" , IPAddr . new ( "fe80::1%br-lan" ) . to_s )
307+ assert_equal ( "fe80::%a~b/64" , IPAddr . new ( "fe80::1%a~b/64" ) . cidr )
305308 end
306309
307310 def test_to_bits
@@ -389,6 +392,12 @@ def test_zone_id
389392 assert_equal ( '%ab0' , a . zone_id )
390393 assert_equal ( "1:2:3:4:5:6:7:8%ab0" , a . to_s )
391394 assert_raise ( IPAddr ::InvalidAddressError ) { a . zone_id = '%' }
395+ a . zone_id = '%eth0.100'
396+ assert_equal ( "1:2:3:4:5:6:7:8%eth0.100" , a . to_s )
397+ a . zone_id = '%br-lan'
398+ assert_equal ( '%br-lan' , a . zone_id )
399+ assert_raise ( IPAddr ::InvalidAddressError ) { a . zone_id = '%a b' }
400+ assert_raise ( IPAddr ::InvalidAddressError ) { a . zone_id = '%a/b' }
392401 end
393402
394403 def test_to_range
You can’t perform that action at this time.
0 commit comments