渡辺哲也です。

ruby 1.9.0 (2007-05-17 patchlevel 0) [i686-linux]

上で core して落ちますので報告します。

------------------------------
$ ./ruby-1.9.0 -Ke /tmp/j.rb *.c *.h */*.c
zsh: 29641 segmentation fault (core dumped)  ./ruby-1.9.0 -Ke /tmp/j.rb *.c *.h */*.c
------------------------------

-Ke はなくても core します。

gdb の backtrace は string.c tr_setup_table ででているのですが、どうも
不安定のようです。(string.c tr_setup_table そのものは以前と同じようで
すので)

------------------------------
#0  0x080a884b in tr_setup_table (str=1080892200, table=0xbf800150 "\200", init=1) at string.c:3144
3144	    tr.p = RSTRING_PTR(str); tr.pend = tr.p + RSTRING_LEN(str);
(gdb) bt
#0  0x080a884b in tr_setup_table (str=1080892200, table=0xbf800150 "\200", init=1) at string.c:3144
#1  0x080a8d6b in rb_str_count (argc=1, argv=0x40309024, str=1080892240) at string.c:3384
#2  0x080bd325 in call_cfunc (func=0x80a8d06 <rb_str_count>, recv=1080892240, len=1080892200, argc=1, argv=0x7) at call_cfunc.ci:36
#3  0x080bb4a4 in th_eval (th=0x814fef0, initial=0) at insns.def:1279
#4  0x080bcc76 in th_eval_body (th=0x814fef0) at vm.c:1620
#5  0x080bd15f in rb_thread_eval (th=0x814fef0, iseqval=1076863380) at vm.c:1826
#6  0x080be51d in yarvcore_eval_iseq (iseq=1076863380) at yarvcore.c:97
#7  0x080be5ba in yarvcore_eval_parsed (node=0x402fa1d0, file=1076863420) at yarvcore.c:129
#8  0x08059057 in ruby_exec_internal () at eval.c:210
#9  0x08059087 in ruby_exec () at eval.c:223
#10 0x080590bd in ruby_run () at eval.c:242
#11 0x08056abd in main () at main.c:47
#12 0x400d9c1f in __libc_start_main () from /lib/i686/libc.so.6
------------------------------

------------------------------
#0  0x080a890c in tr_setup_table (str=0, table=0xbf800170 '\001' <repeats 200 times>..., init=1) at string.c:3160
3160		buf[c & 0xff] = !cflag;
(gdb) bt
#0  0x080a890c in tr_setup_table (str=0, table=0xbf800170 '\001' <repeats 200 times>..., init=1) at string.c:3160
#1  0x080a8d6b in rb_str_count (argc=1, argv=0x40309024, str=1080892240) at string.c:3384
#2  0x080bd325 in call_cfunc (func=0x80a8d06 <rb_str_count>, recv=1080892240, len=0, argc=1, argv=0x406d1b30) at call_cfunc.ci:36
#3  0x080bb4a4 in th_eval (th=0x814fef0, initial=0) at insns.def:1279
#4  0x080bcc76 in th_eval_body (th=0x814fef0) at vm.c:1620
#5  0x080bd15f in rb_thread_eval (th=0x814fef0, iseqval=1076863380) at vm.c:1826
#6  0x080be51d in yarvcore_eval_iseq (iseq=1076863380) at yarvcore.c:97
#7  0x080be5ba in yarvcore_eval_parsed (node=0x402fa1d0, file=1076863420) at yarvcore.c:129
#8  0x08059057 in ruby_exec_internal () at eval.c:210
#9  0x08059087 in ruby_exec () at eval.c:223
#10 0x080590bd in ruby_run () at eval.c:242
#11 0x08056abd in main () at main.c:47
#12 0x400d9c1f in __libc_start_main () from /lib/i686/libc.so.6
------------------------------

再現スクリプト

------------------------------
require 'nkf'

while gets("\n")
  l = $_
  break if l.count("\n") > 1
  l = NKF.nkf('-Se', l)
  if l =~ /SIGV/
  end
end
------------------------------

再現スクリプトのどの行も最小限必要そうです。処理量関係ではないか?
とは思うのですが。

再現方法

------------------------------
$ cd ruby-1.9 系ソースのトップ
$ ./ruby 再現スクリプト *.c *.h */*.c
------------------------------

strace の結果ではほぼ毎回 win32/win32.c で起きているようなのですが、単
純に処理量と思われます。win32/win32.c のファイル一つでは起きません。

確認したシステムは

------------------------------
Vine Linux 3.2 glibc-2.3.3-3vl1.3
Vine Linux 4.1 glibc-2.3.4-2vl3
------------------------------

です。

Ruby のソースコードレベルのものを扱って気が付いたのですが、いつごろか
らか? というのははっきりしません。普段から使っているスクリプトで起きた
のですが、扱う量に依存しているようなので、はっきりしませんです。すいま
せん。