Picon

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


Issue #6479 has been reported by kachick (Kenichi Kamiya).

----------------------------------------
Bug #6479: ipaddr.rbの受け付ける書式が、プラットフォームによって異なる
https://bugs.ruby-lang.org/issues/6479

Author: kachick (Kenichi Kamiya)
Status: Open
Priority: Normal
Assignee: 
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>
(Continue reading)

no6v (Nobuhiro IMAI | 20 May 11:36
Picon
Gravatar

[ruby-dev:45659] [ruby-trunk - Bug #6473][Open] Enumerable#count


Issue #6473 has been reported by no6v (Nobuhiro IMAI).

----------------------------------------
Bug #6473: Enumerable#count
https://bugs.ruby-lang.org/issues/6473

Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]

=begin
Enumerable#count には、

 Returns the number of items in <i>enum</i> if it responds to a #size call,
 otherwise the items are counted through enumeration.  If an argument is

というコメントが書いてありますが、実際には

 class E
   include Enumerable

   def each
   end

   def size
(Continue reading)

naruse (Yui NARUSE | 20 May 00:58
Picon
Gravatar

[ruby-dev:45658] [ruby-trunk - Bug #4387][Feedback] test_socket_connect_nonblock(TestSocketAddrinfo) がまれに失敗する


Issue #4387 has been updated by naruse (Yui NARUSE).

Status changed from Rejected to Feedback

[ruby-list:38139] にもスレがありますね。

まとめると、
1. connect_nonblock を呼ぶ
2.1. ECONNREFUSED が返る (localhost など結果が瞬間的に返る場合)
2.2.1. EINPROGRESS が返る
2.2.2. select で待つ→成功か失敗に収束
2.2.3.1. EISCONN が返る (成功)
2.2.3.2. EINVAL が返る (失敗)
って事のようです。
ここで EINVAL が返るのはFreeBSD や NetBSD もそうです。
Linux の場合、とりあえず手元で試した「localhost の開いていないポートに接続」というケースでは、
ECONNABORTED が返ってきました。

さて、ここでの悩みどころは改めて connect_nonblock して EINVAL が返ってきてしまうと、
もはや失敗した理由はわからなくなってしまう事です。
これは、例えば以下のように connect_nonblock の前に getsockopt すれば理由がわかります。
diff --git a/test/socket/test_addrinfo.rb b/test/socket/test_addrinfo.rb
index 3240b9d..1e047c9 100644
--- a/test/socket/test_addrinfo.rb
+++ b/test/socket/test_addrinfo.rb
@@ -159,6 +159,8 @@ class TestSocketAddrinfo < Test::Unit::TestCase
       s2.connect_nonblock(ai)
     rescue IO::WaitWritable
       IO.select(nil, [s2])
(Continue reading)

Gravatar

[ruby-dev:45656] [ruby-trunk - Bug #6460][Assigned] `unexpected return' occurs when a proc is called in ensure


Issue #6460 has been reported by ktsj (Kazuki Tsujimoto).

----------------------------------------
Bug #6460: `unexpected return' occurs when a proc is called in ensure
https://bugs.ruby-lang.org/issues/6460

Author: ktsj (Kazuki Tsujimoto)
Status: Assigned
Priority: Normal
Assignee: ko1 (Koichi Sasada)
Category: YARV
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35711) [x86_64-linux]

=begin
辻本です。

Bug #2729, #5234 の続きのような話になりますが
以下のコードでunexpected returnとなります。

 class C
   def each
     begin
       yield :foo
     ensure
       1.times { Proc.new }
     end
   end

(Continue reading)

no6v (Nobuhiro IMAI | 19 May 04:22
Picon
Gravatar

[ruby-dev:45655] [ruby-trunk - Bug #6456][Open] [readline] Readline.point when history edited


Issue #6456 has been reported by no6v (Nobuhiro IMAI).

----------------------------------------
Bug #6456: [readline] Readline.point when history edited
https://bugs.ruby-lang.org/issues/6456

Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee: 
Category: ext
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]

=begin
以下のように、履歴をたどって編集した時に Readline.point の値がおかしくなるようです。

 require "readline"

 RUBY_DESCRIPTION  # => "ruby 2.0.0dev (2012-05-19 trunk 35705) [x86_64-linux]"
 Readline::VERSION # => "6.2"

 IO.pipe do |r, w|
   Readline.input = r
   w << "123\n\cP456\n\cP\n"
   Readline.readline("", true) # => "123"
   Readline.point              # => 3
   Readline.readline("", true) # => "123456"
   Readline.point              # => 3
(Continue reading)

sho-h (Sho Hashimoto | 19 May 03:23
Picon

[ruby-dev:45654] [ruby-trunk - Bug #6455][Open] IRB.conf[:RC_NAME_GENERATOR] と IRB.conf[:SAVE_HISTORY] を同時に設定すると irb が起動できないのを修正する


Issue #6455 has been reported by sho-h (Sho Hashimoto).

----------------------------------------
Bug #6455: IRB.conf[:RC_NAME_GENERATOR] と IRB.conf[:SAVE_HISTORY] を同時に設定すると
irb が起動できないのを修正する
https://bugs.ruby-lang.org/issues/6455

Author: sho-h (Sho Hashimoto)
Status: Open
Priority: Normal
Assignee: keiju (Keiju Ishitsuka)
Category: lib
Target version: 2.0.0
ruby -v: ruby 1.8.7 (2010-08-16 patchlevel 302)
[i486-linux]

るりまを書いている最中に気づいたのですが、IRB.conf[:RC_NAME_GENERATOR]
と IRB.conf[:SAVE_HISTORY] を同時に設定すると irb
の起動時にヒストリファイルの読み込みで例外が発生して irb が起動できません。

  $ irb
  /usr/lib/ruby/1.8/irb/ext/save-history.rb:77:in `exist?': can't convert nil into String (TypeError)
          from /usr/lib/ruby/1.8/irb/ext/save-history.rb:77:in `load_history'
          ...
  $

IRB.rc_file("_history") が nil を返すようになるためではないかと思います。

  $ irb -f
(Continue reading)

5.5 (5 5 | 18 May 17:44
Favicon

[ruby-dev:45652] [ruby-trunk - Bug #6450][Open] Shift JIS で String#tr の範囲指定がおかしい


Issue #6450 has been reported by 5.5 (5 5).

----------------------------------------
Bug #6450: Shift JIS で String#tr の範囲指定がおかしい
https://bugs.ruby-lang.org/issues/6450

Author: 5.5 (5 5)
Status: Open
Priority: Normal
Assignee: 
Category: M17N
Target version: 1.9.3
ruby -v: ruby 1.9.3p202 (2012-04-27 revision 35484) [x86_64-darwin10.8.0]

=begin
CP932(Windows-31J)は,第二バイトが 0x7F
になる文字が存在しない仕組みになっていますが,以下の例のように,String#tr で範囲指定を使うと,そのような文字が存在するかのような動作になります。

 # encoding: cp932

 p "マミムメモ".tr("マ-モ", "マ-モ") # => "マミメモモ"
 p "マミムメモ".tr("マ-モ", "マ-モ") # => "マミ\x83\x7Fムメ"

 p "мнопр".tr("а-я", "А-Я") # => "МНПРС"
 p "МНОПР".tr("А-Я", "а-я") # => "мн\x84\x7Fоп"

この例では,文字コード表で,全角片仮名「ミ」と「ム」の間,およびキリル文字小文字の「н」と「о」の間に文字が存在するかのように置換してしまっています。

これが仕様だとすると,String#tr を使うのに文字の並び順の知識だけでなく,どのようなバイト列に符号化されるかといった知識まで必
(Continue reading)

Takahiro Kambe | 18 May 05:26
Gravatar

[ruby-dev:45650] space in COUTFLAG

こんにちは。

mkmf.rbで作成するMakefileには COUTFLAG や OUTFLAG といったmakeの変数が
定義されます。その内容が意図した結果となっていないのではないかと思いま
した。殆どの環境で実害は出ていないと思います。

きっかけは4月の終わりに、Solaris 9上のpkgsrcでruby193-baseのコンパイル
がエラーとなるという報告がありました。報告された方に答えつつ確認を求め
た事項が少々的外れだったのですが、症状としてはmakeから、以下を実行して
エラーになるという内容です。

	cc ...(いっぱいオプション) -fPIC -obug.o -c bug.c

ここで、ポイントは -o オプションと出力先のファイル名の間にスペースがな
いことです。Solaris 9のas(1)は、ここにスペースがないとエラーとなるよう
です。(Solaris 10では問題とはならないことは確認しています。)

上記のコマンドが来た元を追うと、

1. 生成されたMakefile(例えば、ext/-test-/bug-3571/Makefile)では、

.c.o:
	$(ECHO) compiling $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<

   といったルールがあって、$(COUTFLAG)と$@の間にスペースはありません。
   (スペースがあってはならない環境もあるのでしょうか?)

2. 同じMakefileで COUTFLAGS は、

(Continue reading)

Nobuyoshi Nakada | 17 May 18:03
Favicon
Gravatar

[ruby-dev:45647] Re: [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい

(12/05/18 0:00), Tanaka Akira wrote:
> 2012/5/17 Nobuyoshi Nakada <nobu <at> ruby-lang.org>:
>> ungetcするのはどうでしょうか。プロセスをまたいでしまうとやはりダメです
>> が、これは現状でもできないようですし。
> 
> うぅむ。どのくらい ungetc できるかはバッファの状況によるので、
> ちゃんと動きますかねぇ?

そういえばungetcではバッファを追加するわけじゃないですね。

> というか、わざわざ新しくバッファを実装しなくても、
> IO のメソッドの実体を直接呼べば
> (IO の場合) メソッド呼び出しコストは消せるんじゃないですかね。
> それではダメ?

試してみましたが、あまり速くはならないようです。

  original       4.15sec
  rb_method_call 4.11sec
  rb_vm_call     3.88sec

--

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

naruse (Yui NARUSE | 16 May 05:59
Picon
Gravatar

[ruby-dev:45640] [ruby-trunk - Bug #6441][Assigned] IO.pipe on ENFILE


Issue #6441 has been reported by naruse (Yui NARUSE).

----------------------------------------
Bug #6441: IO.pipe on ENFILE
https://bugs.ruby-lang.org/issues/6441

Author: naruse (Yui NARUSE)
Status: Assigned
Priority: Normal
Assignee: authorNari (Narihiro Nakamura)
Category: 
Target version: 
ruby -v: ruby 2.0.0dev (2012-05-16 trunk 35659) [x86_64-netbsd6.99.5]

今の Ruby は open(2) などで、errno=ENFILE が発生した場合、
すなわち fd を使いきっている場合には、rb_gc() を呼び、IO
オブジェクトを GC して、
fd が解放されないか試み、それでもダメだったら諦めるとしています。

しかし、IO.pipe の場合はこれに失敗することがあります。
これは、lazy sweep が上記の目的のため T_FILE の場合は直ちに sweep することにしている所、
pipe の場合はその例外にあたらないからです。

--

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

Picon
Gravatar

[ruby-dev:45637] [ruby-trunk - Feature #6440][Open] 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい


Issue #6440 has been reported by Glass_saga (Masaki Matsushita).

----------------------------------------
Feature #6440: 引数にIOを渡した場合のMarshal.loadにバッファを持たせたい
https://bugs.ruby-lang.org/issues/6440

Author: Glass_saga (Masaki Matsushita)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 2.0.0

現在のMarshal.loadでは、引数にIOを渡すとIO#getbyteやIO#readで当座に必要な部分のみの読み出しを繰り返すので
大量のメソッド呼び出しが発生し、そのコストが無視できません。
そこで、引数にIOを渡した場合のMarshal.loadにバッファを持たせる事を提案します。

require 'benchmark'
require 'tempfile'

ary = Array.new(1000){ "hoge" }
file = Tempfile.new("foo")
Marshal.dump(ary, file)

Benchmark.bm do |x|
  x.report do
    100.times do
      file.rewind
      Marshal.load(file)
(Continue reading)


Gmane