[#45637] [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

14 messages 2012/05/16

[#45670] [ruby-trunk - Bug #6479][Open] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる — "kachick (Kenichi Kamiya)" <kachick1+ruby@...>

9 messages 2012/05/22

[ruby-dev:45679] Re: [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる

From: "Akinori MUSHA" <knu@...>
Date: 2012-05-25 05:00:14 UTC
List: ruby-dev #45679
At Wed, 23 May 2012 17:23:23 +0900,
U.Nakamura wrote:
> In message "[ruby-dev:45671] [ruby-trunk - Bug #6479][Assigned] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる"
>     on May.23,2012 16:16:40, <[email protected]> wrote:
> > とりあえず、#in_addrのみを次のように上書きした際、Windowsと同様に動作することまでは確認できました。
>
> Socket::AF_INET6がない場合にIPSocket.getaddressを上書きしてい
> るコードがipaddr.rbの冒頭にあると思いますので、プラットフォー
> ム提供のそれが信用できないならこっちを常に有効にするのもあり
> かもしれません。
> Windowsだとたぶんそれを使ってるんだと思います。

IPAddr.new における IPSocket.getaddress の呼び出しですが、推測するに、
Socket.getaddrinfo(..., Socket::AI_NUMERICHOST) が意図通り動いてくれな
かったので IPSocket.getaddress に書き換えたが、想定(socket のIPv6対応
は完了していたので…)に反してこいつのIPv6アドレス対応がプラットフォー
ム依存だったということではないかと思います。

いずれにしても、 IPAddr レベルでのプラットフォーム依存性は望ましくない
ので、これを呼ぶ前に検査および正規化(ゼロ埋め排除等)するようにします。

なお、 IPSocket.valid*? 条件付きで表に出るのは変なのでここは private に
し、 IPSocket.getaddress の上書きについても AF_INET6 がない場合の
IPv6アドレス対応の付加程度に止めたいと思います。

--
Akinori MUSHA / http://akinori.org/

In This Thread