ipaddr 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ipaddr.rb +25 -17
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06fb862bc853927b4eb39fd9026c6c8ad873faa1a68f9c39273dc138f7eb0d37
4
- data.tar.gz: 67115eb06827bcde6f1639535494f5b190529b127577af48f76ae3bf4886110c
3
+ metadata.gz: f58727d4b57c7d063e7f6671b34b03f93de0b0b38f035528f9e3b6ef77842512
4
+ data.tar.gz: 71c172f3e9506cfaacd857ad27099ca01f7862737590c3fd6ac4ca01952f96c1
5
5
  SHA512:
6
- metadata.gz: 1e75fe29c69c244547d966127f1fd98b38352ad562ac2c5b2cdbb301374d390b99ab81f8bdc976f23668df2cfe9b03872a8fef559769f474668936bea5f219c2
7
- data.tar.gz: 62a69ec4cdbe84424750ec9b1947a4d6184bf835db3cc3a1053da8e646c7df5557ae9ba36c9943e827f6c3d4e238127d5d1ce6fab89b4bdf482dcd58753e0134
6
+ metadata.gz: f97223995de559e291ba8058014e3ba23606f36670c2cf8360aa1f35c2dfa716fc0956cda1ceead863715ecd5065457c295f8c8653e999e63757f88c2d937a11
7
+ data.tar.gz: 20d8934e68d7f4be367267661c398c452f65d066b8a623e0e6fc2d17569fca3e82381606001eb0a56294132cd438e98ba5e7a34faf18098093bb71ea3aee9e86
data/lib/ipaddr.rb CHANGED
@@ -40,7 +40,7 @@ require 'socket'
40
40
  # p ipaddr3 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
41
41
 
42
42
  class IPAddr
43
- VERSION = "1.2.5"
43
+ VERSION = "1.2.6"
44
44
 
45
45
  # 32 bit mask for IPv4
46
46
  IN4MASK = 0xffffffff
@@ -176,9 +176,7 @@ class IPAddr
176
176
  def include?(other)
177
177
  other = coerce_other(other)
178
178
  return false unless other.family == family
179
- range = to_range
180
- other = other.to_range
181
- range.begin <= other.begin && range.end >= other.end
179
+ begin_addr <= other.begin_addr && end_addr >= other.end_addr
182
180
  end
183
181
  alias === include?
184
182
 
@@ -263,7 +261,8 @@ class IPAddr
263
261
  # Returns true if the ipaddr is a private address. IPv4 addresses
264
262
  # in 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16 as defined in RFC
265
263
  # 1918 and IPv6 Unique Local Addresses in fc00::/7 as defined in RFC
266
- # 4193 are considered private.
264
+ # 4193 are considered private. Private IPv4 addresses in the
265
+ # IPv4-mapped IPv6 address range are also considered private.
267
266
  def private?
268
267
  case @family
269
268
  when Socket::AF_INET
@@ -271,7 +270,12 @@ class IPAddr
271
270
  @addr & 0xfff00000 == 0xac100000 || # 172.16.0.0/12
272
271
  @addr & 0xffff0000 == 0xc0a80000 # 192.168.0.0/16
273
272
  when Socket::AF_INET6
274
- @addr & 0xfe00_0000_0000_0000_0000_0000_0000_0000 == 0xfc00_0000_0000_0000_0000_0000_0000_0000
273
+ @addr & 0xfe00_0000_0000_0000_0000_0000_0000_0000 == 0xfc00_0000_0000_0000_0000_0000_0000_0000 ||
274
+ (@addr & 0xffff_0000_0000 == 0xffff_0000_0000 && (
275
+ @addr & 0xff000000 == 0x0a000000 || # ::ffff:10.0.0.0/8
276
+ @addr & 0xfff00000 == 0xac100000 || # ::ffff::172.16.0.0/12
277
+ @addr & 0xffff0000 == 0xc0a80000 # ::ffff::192.168.0.0/16
278
+ ))
275
279
  else
276
280
  raise AddressFamilyError, "unsupported address family"
277
281
  end
@@ -400,17 +404,6 @@ class IPAddr
400
404
 
401
405
  # Creates a Range object for the network address.
402
406
  def to_range
403
- begin_addr = (@addr & @mask_addr)
404
-
405
- case @family
406
- when Socket::AF_INET
407
- end_addr = (@addr | (IN4MASK ^ @mask_addr))
408
- when Socket::AF_INET6
409
- end_addr = (@addr | (IN6MASK ^ @mask_addr))
410
- else
411
- raise AddressFamilyError, "unsupported address family"
412
- end
413
-
414
407
  self.class.new(begin_addr, @family)..self.class.new(end_addr, @family)
415
408
  end
416
409
 
@@ -491,6 +484,21 @@ class IPAddr
491
484
 
492
485
  protected
493
486
 
487
+ def begin_addr
488
+ @addr & @mask_addr
489
+ end
490
+
491
+ def end_addr
492
+ case @family
493
+ when Socket::AF_INET
494
+ @addr | (IN4MASK ^ @mask_addr)
495
+ when Socket::AF_INET6
496
+ @addr | (IN6MASK ^ @mask_addr)
497
+ else
498
+ raise AddressFamilyError, "unsupported address family"
499
+ end
500
+ end
501
+
494
502
  # Set +@addr+, the internal stored ip address, to given +addr+. The
495
503
  # parameter +addr+ is validated using the first +family+ member,
496
504
  # which is +Socket::AF_INET+ or +Socket::AF_INET6+.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ipaddr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akinori MUSHA
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-12-05 00:00:00.000000000 Z
12
+ date: 2023-12-16 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: |
15
15
  IPAddr provides a set of methods to manipulate an IP address.
@@ -45,7 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  requirements: []
48
- rubygems_version: 3.4.0.dev
48
+ rubygems_version: 3.5.0.dev
49
49
  signing_key:
50
50
  specification_version: 4
51
51
  summary: A class to manipulate an IP address in ruby