Skip to content

Commit 3589191

Browse files
committed
Unified similar exceptions, exceptions inherit from IPAddr::Error
1 parent 006aaa7 commit 3589191

File tree

1 file changed

+48
-53
lines changed

1 file changed

+48
-53
lines changed

lib/ipaddr.rb

Lines changed: 48 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -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(/\A0./) and raise ZeroFilledNumber, "zero-filled number is ambiguous"
537+
(n = s.to_i) < 256 or raise InvalidAddressError, "invalid address"
538+
s.match(/\A0./) 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

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy