[#45703] test_advise failure on GNU/Linux — Tanaka Akira <tanaka.akira@...>
今朝、気がついたのですが、手元で test_advise が失敗します。
小崎です
>> /tmp は tmpfs で、カレントディレクトリは ext3 なのですが、
2012年6月22日 16:42 KOSAKI Motohiro <kosaki.motohiro@gmail.com>:
[#45723] Developers' meeting (7/21) — Yusuke Endoh <mame@...>
Hello, committers
Four seats are now left.
[#45735] [ruby-trunk - Feature #6587][Open] proposal: adding new methods File.rootname and Pathname#rootname — "usa (Usaku NAKAMURA)" <usa@...>
[#45745] Re: [ruby-changes:24028] yugui:r36079 (trunk): Embedding CRuby interpreter without internal headers has been difficult — SASADA Koichi <ko1@...>
見逃していました.
2012/6/15 SASADA Koichi <ko1@atdot.net>:
ささだです.
こんにちは、なかむら(う)です。
2012/6/15 U.Nakamura <usa@garbagecollect.jp>:
なかだです。
2012/6/15 SASADA Koichi <ko1@atdot.net>:
ささだです.
2012/6/19 SASADA Koichi <ko1@atdot.net>:
[#45769] [ruby-trunk - Bug #6606][Open] default_external encoding and STDOUT and UTF-8 — "shyouhei (Shyouhei Urabe)" <shyouhei@...>
[#45780] Re: [ruby-changes:24083] nobu:r36134 (trunk): process.c: no method calls in async-signal-safe — Tanaka Akira <akr@...>
2012/6/19 nobu <ko1@atdot.net>:
[#45794] :new_pgroup and :pgroup option for spawn. — Tanaka Akira <akr@...>
process.c で気がついたのですが、spawn に Windows 用の :new_pgroup というオプションが
こんにちは、なかむら(う)です。
2012年6月25日 11:27 U.Nakamura <usa@garbagecollect.jp>:
こんにちは、なかむら(う)です。
2012年6月25日 11:52 U.Nakamura <usa@garbagecollect.jp>:
こんにちは、なかむら(う)です。
2012年6月25日 12:13 U.Nakamura <usa@garbagecollect.jp>:
こんにちは、なかむら(う)です。
[#45818] [ruby-trunk - Feature #6643][Open] io.seek(off, :end) — "akr (Akira Tanaka)" <akr@...>
At Mon, 25 Jun 2012 19:32:06 +0900,
2012年6月25日 23:37 SATOH Fumiyasu <fumiyas@osstech.jp>:
[#45826] Question: Thread#kill doesn't throw Exception — SASADA Koichi <ko1@...>
ささだです.
> さらに突っ込んだ質問:
(2012/06/26 4:25), KOSAKI Motohiro wrote:
[ruby-dev:45699] [ruby-trunk - Bug #6479] ipaddr.rbの受け付ける書式が、プラットフォームによって異なる
Issue #6479 has been updated by kachick (Kenichi Kamiya).
武者さん、なかむら(う)さん
お二方とも、御返信下さり有難う御座います。
> cf. http://pubs.opengroup.org/onlinepubs/009696799/functions/inet_addr.html
0埋め時のC側に於ける解釈は、8進数にする旨明記されていたのですね
由来が把握できて、すっきりしました。
> なお、あとは x:x:x:x:x:x:d.d.d.d 形式で今までは意図せずエラーとなっていた部分について仕様を詰めており、これが詰まり次第commitおよびbackportする予定です。もうしばらくお待ちください。
御丁寧に有難うございます。
手元の ipaddr.rb を利用しているコード内で問題が表面化している/いそうなわけでもないので、気長に待つつもりでした。
お手すきの際でも結構ですので、引き続き御検討頂けると嬉しいです。
----------------------------------------
Bug #6479: ipaddr.rbの受け付ける書式が、プラットフォームによって異なる
https://bugs.ruby-lang.org/issues/6479#change-26954
Author: kachick (Kenichi Kamiya)
Status: Assigned
Priority: Normal
Assignee: knu (Akinori MUSHA)
Category: lib
Target version: 1.9.3
ruby -v: ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
# 状況
標準添付ライブラリの ipaddr.rb に於いて、アドレス書式チェック時の厳しさがプラットフォームによって異なるよう感じました。
IPv4で気がついた限りですが、次の2点でWindowsだと常に例外を吐き、Linuxだと書式によっては(自分にとって)想定し難い値を返します。
* 0埋めを含んだ場合
* 改行文字を含んだ場合
動作例を載せます。
## 共通
require 'ipaddr'
p IPAddr.new("11.22.33.45") #=> #<IPAddr: IPv4:11.22.33.45/255.255.255.255>
## Windows(7) / ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
# 以下全てで、同じ例外を吐きます。
p IPAddr.new("011.22.33.45")
p IPAddr.new("011.0022.00033.000045")
p IPAddr.new("011.0022.00033.000045\n")
p IPAddr.new("011.0022.00033.000045\nfoo32/0024/bar \n/foobar ")
p IPAddr.new("011.0022.00033.000045\n056.0067.00078.00089\nfoo32/0024/bar \n/foobar ")
# 例外
ArgumentError: invalid address
from C:/Ruby193/lib/ruby/1.9.1/ipaddr.rb:496:in `rescue in initialize'
## Linux(Mint12) / ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
# Windowsの際と同じ引数に対して、一つも例外を吐きません
p IPAddr.new("011.22.33.45") #=> #<IPAddr: IPv4:11.22.33.45/255.255.255.255>
p IPAddr.new("011.0022.00033.000045") #=> #<IPAddr: IPv4:11.22.33.45/255.255.255.255>
p IPAddr.new("011.0022.00033.000045\n") #=> #<IPAddr: IPv4:11.22.33.45/255.255.255.255>
p IPAddr.new("011.0022.00033.000045\nfoo32/0024/bar \n/foobar ") #=> #<IPAddr: IPv4:11.22.33.0/255.255.255.0>
p IPAddr.new("011.0022.00033.000045\n056.0067.00078.00089\nfoo32/0024/bar \n/foobar ") #=> #<IPAddr: IPv4:45.67.78.0/255.255.255.0>
# 希望
Windows環境下の例にみるよう、上記全てのパターンで例外を吐いてくれる方が自然に感じました。
特にLinux上での0埋めに関しては、桁数に制限が見られ無い点と、IPSocket.getaddress(8進数?)と返す値の異なってしまう点が気になります。
## Linux(Mint12) / ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
require 'socket'
p IPSocket.getaddress("011.0022.00033.000045") #=> "9.18.27.37"
# 参考
ipaddr.rbを自分なりに読んでみた限り、次の要素に起因するのではないかとあたりをつけてみましたが・・・確信はありません。
* 全体的に、チェック用正規表現のメタ文字へ \A\z を使わず、 \A\Z や ^$ で括っていること
* #initialize で、 IPSocket.getaddress が例外を返すかどうかに、正常異常の判断を大きく委ねていること
* #in_addr で、1つのオクテットを \d+ のみでキャプチャしていること
とりあえず、#in_addrのみを次のように上書きした際、Windowsと同様に動作することまでは確認できました。
require 'ipaddr'
class IPAddr
private
remove_method :in_addr
def in_addr(addr)
if addr =~ /\A(?:(?:0|[1-9]\d{0,2})\.){3}(?:0|[1-9]\d{0,2})\z/
return addr.split('.').inject(0) { |i, s|
n = s.to_i
raise ArgumentError, 'invalid address' unless n <= 255
i << 8 | n
}
end
return nil
end
end
--
http://bugs.ruby-lang.org/