ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:50316] [Ruby trunk Bug#14119] IPAdrr#include? does not seem to support the subnet mask
       [not found] <redmine.issue-14119.20171120052929@ruby-lang.org>
@ 2017-11-20  5:29 ` k1lowxb
  2017-11-20  5:40 ` [ruby-dev:50317] [Ruby trunk Bug#14119] IPAddr#include? " k1lowxb
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: k1lowxb @ 2017-11-20  5:29 UTC (permalink / raw)
  To: ruby-dev

Issue #14119 has been reported by k1LoW (Ken'ichiro Oyama).

----------------------------------------
Bug #14119: IPAdrr#include? does not seem to support the subnet mask
https://bugs.ruby-lang.org/issues/14119

* Author: k1LoW (Ken'ichiro Oyama)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
IPAdrr#include? において、引数のIPAddrオブジェクトのネットマスクが考慮された判定になっていないようです。

## 再現方法と得られた結果

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> true
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> true
~~~

## 期待した結果と、それを期待した理由

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> false
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> false
~~~

### 期待した理由

- IPAddrオブジェクトは `#include?` において、レシーバはIPアドレス範囲(集合)として動いている
- [るりま](https://docs.ruby-lang.org/ja/latest/class/IPAddr.html#I_--3D--3D--3D) によると、引数について「与えられた IPAddr オブジェクトが自身の範囲に入っているかを判定します」とある

上記の情報から、レシーバと引数とは集合同士の包含関係をチェックするのが直感的ではないか?と考えたからです。
(片方のIPAddrオブジェクトだけ集合で、片方のIPAddrオブジェクトだけ単一IPアドレスという点が直感的ではない)

### 期待される結果であった場合のユースケース

- iptablesなどで設定されているCIDR表記のIPアドレス範囲に対して、確認したいIPアドレス範囲が含まれているかどうかの確認

---

## 過去の議論のサーベイ

### 1905

#1905 のチケットの中において、`#==` の挙動についての議論の中にIPAddrについての説明ありました(ML側が抜け落ちているので [リンク ruby-dev:39381](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39381))

整形して引用:

```
> > IPAddr.new("192.168.2.0/24") == IPAddr.new("192.168.2.0/32")
> >
> > が true から false に変わるという仕様変更なのですが、どうでしょうか?
>
> というのがまずいでしょうか。

 これは受け入れられません。IPAddrはネットマスクも保持するため
ネットワークもできますが、第一義はIPアドレスなので、ネット
マスクの違いで等しくなくなるのはまずいです。
```

上記から、IPAddrは、まず単一のIPアドレスとして動くことが求められていることは理解しました。

その後、ネットマスクを考慮した拡張についての議論が [ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) であるようなのですが、
こちらは文字化けがあり、まだしっかりと確認・理解できていません。すみません。

### 1275

#1275 のチケットにおいてネットマスクでIPアドレスの情報が消される問題についての議論がありました。

### 過去の議論をふまえて

- 「`IPAdrr#include?` においてはIPアドレス範囲同士の包含関係を見るようにする」のみの修正であれば、IPAddrの第一義に反していないと言えるのでは?と考えています(`IPAdrr#include?`のタイミングではレシーバはネットマスクを考慮するため)。
- #1275 のパッチが入った場合は、本チケットについての修正内容も変更されると思います。
- 上記より踏み込んだ修正は、[ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) にある(であろう)流れの拡張になろうだろうと考えています。



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-dev:50317] [Ruby trunk Bug#14119] IPAddr#include? does not seem to support the subnet mask
       [not found] <redmine.issue-14119.20171120052929@ruby-lang.org>
  2017-11-20  5:29 ` [ruby-dev:50316] [Ruby trunk Bug#14119] IPAdrr#include? does not seem to support the subnet mask k1lowxb
@ 2017-11-20  5:40 ` k1lowxb
  2017-11-20  5:42 ` [ruby-dev:50318] [Ruby trunk Bug#14119][Assigned] " hsbt
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 5+ messages in thread
From: k1lowxb @ 2017-11-20  5:40 UTC (permalink / raw)
  To: ruby-dev

Issue #14119 has been updated by k1LoW (Ken'ichiro Oyama).

Subject changed from IPAdrr#include? does not seem to support the subnet mask to IPAddr#include? does not seem to support the subnet mask

s/IPAdrr/IPAddr/ です。申し訳ありません。。。 

----------------------------------------
Bug #14119: IPAddr#include? does not seem to support the subnet mask
https://bugs.ruby-lang.org/issues/14119#change-67865

* Author: k1LoW (Ken'ichiro Oyama)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
IPAdrr#include? において、引数のIPAddrオブジェクトのネットマスクが考慮された判定になっていないようです。

## 再現方法と得られた結果

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> true
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> true
~~~

## 期待した結果と、それを期待した理由

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> false
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> false
~~~

### 期待した理由

- IPAddrオブジェクトは `#include?` において、レシーバはIPアドレス範囲(集合)として動いている
- [るりま](https://docs.ruby-lang.org/ja/latest/class/IPAddr.html#I_--3D--3D--3D) によると、引数について「与えられた IPAddr オブジェクトが自身の範囲に入っているかを判定します」とある

上記の情報から、レシーバと引数とは集合同士の包含関係をチェックするのが直感的ではないか?と考えたからです。
(片方のIPAddrオブジェクトだけ集合で、片方のIPAddrオブジェクトだけ単一IPアドレスという点が直感的ではない)

### 期待される結果であった場合のユースケース

- iptablesなどで設定されているCIDR表記のIPアドレス範囲に対して、確認したいIPアドレス範囲が含まれているかどうかの確認

---

## 過去の議論のサーベイ

### 1905

#1905 のチケットの中において、`#==` の挙動についての議論の中にIPAddrについての説明ありました(ML側が抜け落ちているので [リンク ruby-dev:39381](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39381))

整形して引用:

```
> > IPAddr.new("192.168.2.0/24") == IPAddr.new("192.168.2.0/32")
> >
> > が true から false に変わるという仕様変更なのですが、どうでしょうか?
>
> というのがまずいでしょうか。

 これは受け入れられません。IPAddrはネットマスクも保持するため
ネットワークもできますが、第一義はIPアドレスなので、ネット
マスクの違いで等しくなくなるのはまずいです。
```

上記から、IPAddrは、まず単一のIPアドレスとして動くことが求められていることは理解しました。

その後、ネットマスクを考慮した拡張についての議論が [ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) であるようなのですが、
こちらは文字化けがあり、まだしっかりと確認・理解できていません。すみません。

### 1275

#1275 のチケットにおいてネットマスクでIPアドレスの情報が消される問題についての議論がありました。

### 過去の議論をふまえて

- 「`IPAdrr#include?` においてはIPアドレス範囲同士の包含関係を見るようにする」のみの修正であれば、IPAddrの第一義に反していないと言えるのでは?と考えています(`IPAdrr#include?`のタイミングではレシーバはネットマスクを考慮するため)。
- #1275 のパッチが入った場合は、本チケットについての修正内容も変更されると思います。
- 上記より踏み込んだ修正は、[ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) にある(であろう)流れの拡張になろうだろうと考えています。



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-dev:50318] [Ruby trunk Bug#14119][Assigned] IPAddr#include? does not seem to support the subnet mask
       [not found] <redmine.issue-14119.20171120052929@ruby-lang.org>
  2017-11-20  5:29 ` [ruby-dev:50316] [Ruby trunk Bug#14119] IPAdrr#include? does not seem to support the subnet mask k1lowxb
  2017-11-20  5:40 ` [ruby-dev:50317] [Ruby trunk Bug#14119] IPAddr#include? " k1lowxb
@ 2017-11-20  5:42 ` hsbt
  2019-10-31 17:12 ` [ruby-dev:50855] [Ruby master Bug#14119] " merch-redmine
  2019-12-03 22:38 ` [ruby-dev:50875] " merch-redmine
  4 siblings, 0 replies; 5+ messages in thread
From: hsbt @ 2017-11-20  5:42 UTC (permalink / raw)
  To: ruby-dev

Issue #14119 has been updated by hsbt (Hiroshi SHIBATA).

Status changed from Open to Assigned
Assignee set to knu (Akinori MUSHA)

----------------------------------------
Bug #14119: IPAddr#include? does not seem to support the subnet mask
https://bugs.ruby-lang.org/issues/14119#change-67866

* Author: k1LoW (Ken'ichiro Oyama)
* Status: Assigned
* Priority: Normal
* Assignee: knu (Akinori MUSHA)
* Target version: 
* ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
IPAdrr#include? において、引数のIPAddrオブジェクトのネットマスクが考慮された判定になっていないようです。

## 再現方法と得られた結果

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> true
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> true
~~~

## 期待した結果と、それを期待した理由

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> false
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> false
~~~

### 期待した理由

- IPAddrオブジェクトは `#include?` において、レシーバはIPアドレス範囲(集合)として動いている
- [るりま](https://docs.ruby-lang.org/ja/latest/class/IPAddr.html#I_--3D--3D--3D) によると、引数について「与えられた IPAddr オブジェクトが自身の範囲に入っているかを判定します」とある

上記の情報から、レシーバと引数とは集合同士の包含関係をチェックするのが直感的ではないか?と考えたからです。
(片方のIPAddrオブジェクトだけ集合で、片方のIPAddrオブジェクトだけ単一IPアドレスという点が直感的ではない)

### 期待される結果であった場合のユースケース

- iptablesなどで設定されているCIDR表記のIPアドレス範囲に対して、確認したいIPアドレス範囲が含まれているかどうかの確認

---

## 過去の議論のサーベイ

### 1905

#1905 のチケットの中において、`#==` の挙動についての議論の中にIPAddrについての説明ありました(ML側が抜け落ちているので [リンク ruby-dev:39381](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39381))

整形して引用:

```
> > IPAddr.new("192.168.2.0/24") == IPAddr.new("192.168.2.0/32")
> >
> > が true から false に変わるという仕様変更なのですが、どうでしょうか?
>
> というのがまずいでしょうか。

 これは受け入れられません。IPAddrはネットマスクも保持するため
ネットワークもできますが、第一義はIPアドレスなので、ネット
マスクの違いで等しくなくなるのはまずいです。
```

上記から、IPAddrは、まず単一のIPアドレスとして動くことが求められていることは理解しました。

その後、ネットマスクを考慮した拡張についての議論が [ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) であるようなのですが、
こちらは文字化けがあり、まだしっかりと確認・理解できていません。すみません。

### 1275

#1275 のチケットにおいてネットマスクでIPアドレスの情報が消される問題についての議論がありました。

### 過去の議論をふまえて

- 「`IPAdrr#include?` においてはIPアドレス範囲同士の包含関係を見るようにする」のみの修正であれば、IPAddrの第一義に反していないと言えるのでは?と考えています(`IPAdrr#include?`のタイミングではレシーバはネットマスクを考慮するため)。
- #1275 のパッチが入った場合は、本チケットについての修正内容も変更されると思います。
- 上記より踏み込んだ修正は、[ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) にある(であろう)流れの拡張になろうだろうと考えています。



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-dev:50855] [Ruby master Bug#14119] IPAddr#include? does not seem to support the subnet mask
       [not found] <redmine.issue-14119.20171120052929@ruby-lang.org>
                   ` (2 preceding siblings ...)
  2017-11-20  5:42 ` [ruby-dev:50318] [Ruby trunk Bug#14119][Assigned] " hsbt
@ 2019-10-31 17:12 ` merch-redmine
  2019-12-03 22:38 ` [ruby-dev:50875] " merch-redmine
  4 siblings, 0 replies; 5+ messages in thread
From: merch-redmine @ 2019-10-31 17:12 UTC (permalink / raw)
  To: ruby-dev

Issue #14119 has been updated by jeremyevans0 (Jeremy Evans).

File ipaddr-include-cover-14119.patch added

I'm not sure this is a bug, but it certainly seems like a bug to me.  `IPAddr#include?` must consider the netmask of the receiver in order to work, for it not to consider the netmask of the argument seems wrong.

Attached is a patch that uses `Range#cover?` to implement the include check, which I think is the best way of solving the issue.  It does not break any existing tests.  It also is a much simpler implementation.

----------------------------------------
Bug #14119: IPAddr#include? does not seem to support the subnet mask
https://bugs.ruby-lang.org/issues/14119#change-82401

* Author: k1LoW (Ken'ichiro Oyama)
* Status: Assigned
* Priority: Normal
* Assignee: knu (Akinori MUSHA)
* Target version: 
* ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
IPAdrr#include? において、引数のIPAddrオブジェクトのネットマスクが考慮された判定になっていないようです。

## 再現方法と得られた結果

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> true
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> true
~~~

## 期待した結果と、それを期待した理由

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> false
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> false
~~~

### 期待した理由

- IPAddrオブジェクトは `#include?` において、レシーバはIPアドレス範囲(集合)として動いている
- [るりま](https://docs.ruby-lang.org/ja/latest/class/IPAddr.html#I_--3D--3D--3D) によると、引数について「与えられた IPAddr オブジェクトが自身の範囲に入っているかを判定します」とある

上記の情報から、レシーバと引数とは集合同士の包含関係をチェックするのが直感的ではないか?と考えたからです。
(片方のIPAddrオブジェクトだけ集合で、片方のIPAddrオブジェクトだけ単一IPアドレスという点が直感的ではない)

### 期待される結果であった場合のユースケース

- iptablesなどで設定されているCIDR表記のIPアドレス範囲に対して、確認したいIPアドレス範囲が含まれているかどうかの確認

---

## 過去の議論のサーベイ

### 1905

#1905 のチケットの中において、`#==` の挙動についての議論の中にIPAddrについての説明ありました(ML側が抜け落ちているので [リンク ruby-dev:39381](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39381))

整形して引用:

```
> > IPAddr.new("192.168.2.0/24") == IPAddr.new("192.168.2.0/32")
> >
> > が true から false に変わるという仕様変更なのですが、どうでしょうか?
>
> というのがまずいでしょうか。

 これは受け入れられません。IPAddrはネットマスクも保持するため
ネットワークもできますが、第一義はIPアドレスなので、ネット
マスクの違いで等しくなくなるのはまずいです。
```

上記から、IPAddrは、まず単一のIPアドレスとして動くことが求められていることは理解しました。

その後、ネットマスクを考慮した拡張についての議論が [ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) であるようなのですが、
こちらは文字化けがあり、まだしっかりと確認・理解できていません。すみません。

### 1275

#1275 のチケットにおいてネットマスクでIPアドレスの情報が消される問題についての議論がありました。

### 過去の議論をふまえて

- 「`IPAdrr#include?` においてはIPアドレス範囲同士の包含関係を見るようにする」のみの修正であれば、IPAddrの第一義に反していないと言えるのでは?と考えています(`IPAdrr#include?`のタイミングではレシーバはネットマスクを考慮するため)。
- #1275 のパッチが入った場合は、本チケットについての修正内容も変更されると思います。
- 上記より踏み込んだ修正は、[ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) にある(であろう)流れの拡張になろうだろうと考えています。

---Files--------------------------------
ipaddr-include-cover-14119.patch (2.25 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [ruby-dev:50875] [Ruby master Bug#14119] IPAddr#include? does not seem to support the subnet mask
       [not found] <redmine.issue-14119.20171120052929@ruby-lang.org>
                   ` (3 preceding siblings ...)
  2019-10-31 17:12 ` [ruby-dev:50855] [Ruby master Bug#14119] " merch-redmine
@ 2019-12-03 22:38 ` merch-redmine
  4 siblings, 0 replies; 5+ messages in thread
From: merch-redmine @ 2019-12-03 22:38 UTC (permalink / raw)
  To: ruby-dev

Issue #14119 has been updated by jeremyevans0 (Jeremy Evans).


As ipaddr has been moved to a gem, I have submitted a pull request for this: https://github.com/ruby/ipaddr/pull/22 

----------------------------------------
Bug #14119: IPAddr#include? does not seem to support the subnet mask
https://bugs.ruby-lang.org/issues/14119#change-82947

* Author: k1LoW (Ken'ichiro Oyama)
* Status: Assigned
* Priority: Normal
* Assignee: knu (Akinori MUSHA)
* Target version: 
* ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
IPAdrr#include? において、引数のIPAddrオブジェクトのネットマスクが考慮された判定になっていないようです。

## 再現方法と得られた結果

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> true
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> true
~~~

## 期待した結果と、それを期待した理由

~~~
irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new('10.5.0.0/24').include?('10.5.0.0/16')
=> true
irb(main):003:0> IPAddr.new('10.5.0.0/16').include?('10.5.0.0/24')
=> false
irb(main):004:0> IPAddr.new('10.5.0.0/24').include?(IPAddr.new('10.5.0.0/16'))
=> true
irb(main):005:0> IPAddr.new('10.5.0.0/16').include?(IPAddr.new('10.5.0.0/24'))
=> false
~~~

### 期待した理由

- IPAddrオブジェクトは `#include?` において、レシーバはIPアドレス範囲(集合)として動いている
- [るりま](https://docs.ruby-lang.org/ja/latest/class/IPAddr.html#I_--3D--3D--3D) によると、引数について「与えられた IPAddr オブジェクトが自身の範囲に入っているかを判定します」とある

上記の情報から、レシーバと引数とは集合同士の包含関係をチェックするのが直感的ではないか?と考えたからです。
(片方のIPAddrオブジェクトだけ集合で、片方のIPAddrオブジェクトだけ単一IPアドレスという点が直感的ではない)

### 期待される結果であった場合のユースケース

- iptablesなどで設定されているCIDR表記のIPアドレス範囲に対して、確認したいIPアドレス範囲が含まれているかどうかの確認

---

## 過去の議論のサーベイ

### 1905

#1905 のチケットの中において、`#==` の挙動についての議論の中にIPAddrについての説明ありました(ML側が抜け落ちているので [リンク ruby-dev:39381](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39381))

整形して引用:

```
> > IPAddr.new("192.168.2.0/24") == IPAddr.new("192.168.2.0/32")
> >
> > が true から false に変わるという仕様変更なのですが、どうでしょうか?
>
> というのがまずいでしょうか。

 これは受け入れられません。IPAddrはネットマスクも保持するため
ネットワークもできますが、第一義はIPアドレスなので、ネット
マスクの違いで等しくなくなるのはまずいです。
```

上記から、IPAddrは、まず単一のIPアドレスとして動くことが求められていることは理解しました。

その後、ネットマスクを考慮した拡張についての議論が [ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) であるようなのですが、
こちらは文字化けがあり、まだしっかりと確認・理解できていません。すみません。

### 1275

#1275 のチケットにおいてネットマスクでIPアドレスの情報が消される問題についての議論がありました。

### 過去の議論をふまえて

- 「`IPAdrr#include?` においてはIPアドレス範囲同士の包含関係を見るようにする」のみの修正であれば、IPAddrの第一義に反していないと言えるのでは?と考えています(`IPAdrr#include?`のタイミングではレシーバはネットマスクを考慮するため)。
- #1275 のパッチが入った場合は、本チケットについての修正内容も変更されると思います。
- 上記より踏み込んだ修正は、[ruby-dev:39391](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/39391) にある(であろう)流れの拡張になろうだろうと考えています。

---Files--------------------------------
ipaddr-include-cover-14119.patch (2.25 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-12-03 22:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <redmine.issue-14119.20171120052929@ruby-lang.org>
2017-11-20  5:29 ` [ruby-dev:50316] [Ruby trunk Bug#14119] IPAdrr#include? does not seem to support the subnet mask k1lowxb
2017-11-20  5:40 ` [ruby-dev:50317] [Ruby trunk Bug#14119] IPAddr#include? " k1lowxb
2017-11-20  5:42 ` [ruby-dev:50318] [Ruby trunk Bug#14119][Assigned] " hsbt
2019-10-31 17:12 ` [ruby-dev:50855] [Ruby master Bug#14119] " merch-redmine
2019-12-03 22:38 ` [ruby-dev:50875] " merch-redmine

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).