@@ -82,31 +82,26 @@ class IPAddr
8282 \z
8383 }xi
8484
85- # Raised when the provided IP address is an invalid address.
86- class InvalidAddress < ArgumentError ; end
87-
88- # Raised when the provided IP address is of an unsupported address family.
89- class UnsupportedAddressFamily < ArgumentError ; end
85+ # Generic IPAddr related error. Exceptions raised in this class should
86+ # inherit from Error.
87+ class Error < ArgumentError ; end
9088
91- # Raised when an octet contains a zero-filled number.
92- # Example: 192.162.022.001
93- class ZeroFilledNumber < ArgumentError ; end
94-
95- # Raised when an address is a mix of address families.
96- class InconsistentAddressFamily < ArgumentError ; end
89+ # Raised when the provided IP address is an invalid address.
90+ class InvalidAddressError < Error ; end
9791
98- # Raised when an address family is unspecified and cannot be reliability
99- # determined (for example: if an Integer is provided instead of a string).
100- class UnspecifiedAddressFamily < ArgumentError ; end
92+ # Raised when the address family is invalid such as an address with an
93+ # unsupported family, an address with an inconsistent family, or an address
94+ # who's family cannot be determined.
95+ class AddressFamilyError < Error ; end
10196
10297 # Raised when the address is an invalid IPv4 address.
103- class InvalidIPv4 < ArgumentError ; end
98+ class InvalidIPv4Error < Error ; end
10499
105100 # Raised when the address is an invalid IPv6 address.
106- class InvalidIPv6 < ArgumentError ; end
101+ class InvalidIPv6Error < Error ; end
107102
108103 # Raised when the address is an invalid length.
109- class InvalidLength < ArgumentError ; end
104+ class InvalidPrefixError < Error ; end
110105
111106 # Returns the address family of this IP address.
112107 attr_reader :family
@@ -126,7 +121,7 @@ def IPAddr::ntop(addr)
126121 when 16
127122 s = IN6FORMAT % addr . unpack ( 'n8' )
128123 else
129- raise UnsupportedAddressFamily , "unsupported address family"
124+ raise AddressFamilyError , "unsupported address family"
130125 end
131126 return s
132127 end
@@ -252,7 +247,7 @@ def hton
252247 ( @addr >> ( 112 - 16 * i ) ) & 0xffff
253248 } . pack ( 'n8' )
254249 else
255- raise UnsupportedAddressFamily , "unsupported address family"
250+ raise AddressFamilyError , "unsupported address family"
256251 end
257252 end
258253
@@ -284,7 +279,7 @@ def ipv4_compat?
284279 # into an IPv4-mapped IPv6 address.
285280 def ipv4_mapped
286281 if !ipv4?
287- raise InvalidIPv4 , "not an IPv4 address"
282+ raise InvalidIPv4Error , "not an IPv4 address"
288283 end
289284 return self . clone . set ( @addr | 0xffff00000000 , Socket ::AF_INET6 )
290285 end
@@ -293,7 +288,7 @@ def ipv4_mapped
293288 # into an IPv4-compatible IPv6 address.
294289 def ipv4_compat
295290 if !ipv4?
296- raise InvalidIPv4 , "not an IPv4 address"
291+ raise InvalidIPv4Error , "not an IPv4 address"
297292 end
298293 return self . clone . set ( @addr , Socket ::AF_INET6 )
299294 end
@@ -317,22 +312,22 @@ def reverse
317312 when Socket ::AF_INET6
318313 return ip6_arpa
319314 else
320- raise UnsupportedAddressFamily , "unsupported address family"
315+ raise AddressFamilyError , "unsupported address family"
321316 end
322317 end
323318
324319 # Returns a string for DNS reverse lookup compatible with RFC3172.
325320 def ip6_arpa
326321 if !ipv6?
327- raise InvalidIPv6 , "not an IPv6 address"
322+ raise InvalidIPv6Error , "not an IPv6 address"
328323 end
329324 return _reverse + ".ip6.arpa"
330325 end
331326
332327 # Returns a string for DNS reverse lookup compatible with RFC1886.
333328 def ip6_int
334329 if !ipv6?
335- raise InvalidIPv6 , "not an IPv6 address"
330+ raise InvalidIPv6Error , "not an IPv6 address"
336331 end
337332 return _reverse + ".ip6.int"
338333 end
@@ -372,7 +367,7 @@ def to_range
372367 when Socket ::AF_INET6
373368 end_addr = ( @addr | ( IN6MASK ^ @mask_addr ) )
374369 else
375- raise UnsupportedAddressFamily , "unsupported address family"
370+ raise AddressFamilyError , "unsupported address family"
376371 end
377372
378373 return clone . set ( begin_addr , @family ) ..clone . set ( end_addr , @family )
@@ -387,7 +382,7 @@ def inspect
387382 when Socket ::AF_INET6
388383 af = "IPv6"
389384 else
390- raise UnsupportedAddressFamily , "unsupported address family"
385+ raise AddressFamilyError , "unsupported address family"
391386 end
392387 return sprintf ( "#<%s: %s:%s/%s>" , self . class . name ,
393388 af , _to_string ( @addr ) , _to_string ( @mask_addr ) )
@@ -404,14 +399,14 @@ def set(addr, *family)
404399 case family [ 0 ] ? family [ 0 ] : @family
405400 when Socket ::AF_INET
406401 if addr < 0 || addr > IN4MASK
407- raise InvalidAddress , "invalid address"
402+ raise InvalidAddressError , "invalid address"
408403 end
409404 when Socket ::AF_INET6
410405 if addr < 0 || addr > IN6MASK
411- raise InvalidAddress , "invalid address"
406+ raise InvalidAddressError , "invalid address"
412407 end
413408 else
414- raise UnsupportedAddressFamily , "unsupported address family"
409+ raise AddressFamilyError , "unsupported address family"
415410 end
416411 @addr = addr
417412 if family [ 0 ]
@@ -428,7 +423,7 @@ def mask!(mask)
428423 else
429424 m = IPAddr . new ( mask )
430425 if m . family != @family
431- raise InconsistentAddressFamily , "address family is not same"
426+ raise AddressFamilyError , "address family is not same"
432427 end
433428 @mask_addr = m . to_i
434429 @addr &= @mask_addr
@@ -440,18 +435,18 @@ def mask!(mask)
440435 case @family
441436 when Socket ::AF_INET
442437 if prefixlen < 0 || prefixlen > 32
443- raise InvalidLength , "invalid length"
438+ raise InvalidPrefixError , "invalid length"
444439 end
445440 masklen = 32 - prefixlen
446441 @mask_addr = ( ( IN4MASK >> masklen ) << masklen )
447442 when Socket ::AF_INET6
448443 if prefixlen < 0 || prefixlen > 128
449- raise InvalidLength , "invalid length"
444+ raise InvalidPrefixError , "invalid length"
450445 end
451446 masklen = 128 - prefixlen
452447 @mask_addr = ( ( IN6MASK >> masklen ) << masklen )
453448 else
454- raise UnsupportedAddressFamily , "unsupported address family"
449+ raise AddressFamilyError , "unsupported address family"
455450 end
456451 @addr = ( ( @addr >> masklen ) << masklen )
457452 return self
@@ -485,9 +480,9 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC)
485480 @mask_addr = ( family == Socket ::AF_INET ) ? IN4MASK : IN6MASK
486481 return
487482 when Socket ::AF_UNSPEC
488- raise UnspecifiedAddressFamily , "address family must be specified"
483+ raise AddressFamilyError , "address family must be specified"
489484 else
490- raise UnsupportedAddressFamily , "unsupported address family: #{ family } "
485+ raise AddressFamilyError , "unsupported address family: #{ family } "
491486 end
492487 end
493488 prefix , prefixlen = addr . split ( '/' )
@@ -510,7 +505,7 @@ def initialize(addr = '::', family = Socket::AF_UNSPEC)
510505 @family = Socket ::AF_INET6
511506 end
512507 if family != Socket ::AF_UNSPEC && @family != family
513- raise InconsistentAddressFamily , "address family mismatch"
508+ raise AddressFamilyError , "address family mismatch"
514509 end
515510 if prefixlen
516511 mask! ( prefixlen )
@@ -539,8 +534,8 @@ def in_addr(addr)
539534 octets = m . captures
540535 end
541536 octets . inject ( 0 ) { |i , s |
542- ( n = s . to_i ) < 256 or raise InvalidAddress , "invalid address"
543- s . match ( /\A 0./ ) and raise ZeroFilledNumber , "zero-filled number is ambiguous"
537+ ( n = s . to_i ) < 256 or raise InvalidAddressError , "invalid address"
538+ s . match ( /\A 0./ ) and raise InvalidIPv4Error , "zero-filled number is ambiguous"
544539 i << 8 | n
545540 }
546541 end
@@ -557,18 +552,18 @@ def in6_addr(left)
557552 right = ''
558553 when RE_IPV6ADDRLIKE_COMPRESSED
559554 if $4
560- left . count ( ':' ) <= 6 or raise InvalidAddress , "invalid address"
555+ left . count ( ':' ) <= 6 or raise InvalidAddressError , "invalid address"
561556 addr = in_addr ( $~[ 4 , 4 ] )
562557 left = $1
563558 right = $3 + '0:0'
564559 else
565- left . count ( ':' ) <= 7 or raise InvalidAddress , "invalid address"
560+ left . count ( ':' ) <= 7 or raise InvalidAddressError , "invalid address"
566561 left = $1
567562 right = $2
568563 addr = 0
569564 end
570565 else
571- raise InvalidAddress , "invalid address"
566+ raise InvalidAddressError , "invalid address"
572567 end
573568 l = left . split ( ':' )
574569 r = right . split ( ':' )
@@ -588,7 +583,7 @@ def addr_mask(addr)
588583 when Socket ::AF_INET6
589584 return addr & IN6MASK
590585 else
591- raise UnsupportedAddressFamily , "unsupported address family"
586+ raise AddressFamilyError , "unsupported address family"
592587 end
593588 end
594589
@@ -601,7 +596,7 @@ def _reverse
601596 when Socket ::AF_INET6
602597 return ( "%.32x" % @addr ) . reverse! . gsub! ( /.(?!$)/ , '\&.' )
603598 else
604- raise UnsupportedAddressFamily , "unsupported address family"
599+ raise AddressFamilyError , "unsupported address family"
605600 end
606601 end
607602
@@ -614,7 +609,7 @@ def _to_string(addr)
614609 when Socket ::AF_INET6
615610 return ( ( "%.32x" % addr ) . gsub! ( /.{4}(?!$)/ , '\&:' ) )
616611 else
617- raise UnsupportedAddressFamily , "unsupported address family"
612+ raise AddressFamilyError , "unsupported address family"
618613 end
619614 end
620615
@@ -741,13 +736,13 @@ def test_s_new
741736
742737 assert_equal("2001:200:300::", IPAddr.new("[2001:200:300::]/48").to_s)
743738
744- assert_raises(IPAddr::InvalidAddress ) { IPAddr.new('192.168.0.256') }
745- assert_raises(IPAddr::ZeroFilledNumber ) { IPAddr.new('192.168.0.011') }
746- assert_raises(IPAddr::InvalidAddress ) { IPAddr.new("fe80::1%fxp0") }
747- assert_raises(IPAddr::InconsistentAddressFamily ) { IPAddr.new("::1/255.255.255.0") }
748- assert_raises(IPAddr::UnspecifiedAddressFamily ) { IPAddr.new(1) }
749- assert_raises(IPAddr::InconsistentAddressFamily ) { IPAddr.new("::ffff:192.168.1.2/120", Socket::AF_INET) }
750- assert_raises(IPAddr::InvalidAddress ) { IPAddr.new("[192.168.1.2]/120") }
739+ assert_raises(IPAddr::InvalidAddressError ) { IPAddr.new('192.168.0.256') }
740+ assert_raises(IPAddr::InvalidIPv4Error ) { IPAddr.new('192.168.0.011') }
741+ assert_raises(IPAddr::InvalidAddressError ) { IPAddr.new("fe80::1%fxp0") }
742+ assert_raises(IPAddr::AddressFamilyError ) { IPAddr.new("::1/255.255.255.0") }
743+ assert_raises(IPAddr::AddressFamilyError ) { IPAddr.new(1) }
744+ assert_raises(IPAddr::AddressFamilyError ) { IPAddr.new("::ffff:192.168.1.2/120", Socket::AF_INET) }
745+ assert_raises(IPAddr::InvalidAddressError ) { IPAddr.new("[192.168.1.2]/120") }
751746 end
752747
753748 def test_s_new_ntoh
@@ -808,14 +803,14 @@ def test_reverse
808803
809804 def test_ip6_arpa
810805 assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.arpa", IPAddr.new("3ffe:505:2::f").ip6_arpa)
811- assert_raises(IPAddr::InvalidIPv6 ) {
806+ assert_raises(IPAddr::InvalidIPv6Error ) {
812807 IPAddr.new("192.168.2.1").ip6_arpa
813808 }
814809 end
815810
816811 def test_ip6_int
817812 assert_equal("f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.5.0.5.0.e.f.f.3.ip6.int", IPAddr.new("3ffe:505:2::f").ip6_int)
818- assert_raises(IPAddr::InvalidIPv6 ) {
813+ assert_raises(IPAddr::InvalidIPv6Error ) {
819814 IPAddr.new("192.168.2.1").ip6_int
820815 }
821816 end
0 commit comments