[#32910] NKF,Kconv — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#32913] openの"b"とencoding — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#32922] SEGV by regexp match in while loop — Tanaka Akira <akr@...>
Debian GNU/Linux (sarge) の gcc-3.4 を使ってビルドした ruby
[#32935] queue and timeout — Tanaka Akira <akr@...>
timeout で Queue#pop に時間制限をつけた時、タイムアウト時に
まつもと ゆきひろです
[#32940] ripper cannot build on win32 — yukimi_sake <yukimi_sake@...>
雪見酒です。
[#32945] Shift_JIS variants and UTF-16 support — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
中村さん、こんにちは。
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
成瀬です。
こんにちは、なかむら(う)です。
成瀬です。
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#32946] replica と alias の違い(encoding) — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32987] error with open-uri (instance_eval?) — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#32988] Re: [ruby-cvs:22194] Ruby:r14957 (trunk): * encoding.c (rb_enc_init): UTF-{16,32}{BE,LE} are not builtin. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#32992] ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
At 18:13 08/01/09, Yukihiro Matsumoto wrote:
成瀬です。
まつもと ゆきひろです
成瀬です。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#32996] binmode and ASCII-8BIT — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#33069] Re: [ruby-cvs:22244] Ruby:r15007 (trunk): * enc/make_encdb.rb: added. search enc/*.c and make encoding database. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
まつもと ゆきひろです
[#33076] Encoding.compatible? and dummy encodings — sheepman <sheepman@...>
こんにちは sheepman です。
成瀬です。
まつもと ゆきひろです
[#33078] NEW REPLICA ENCODINGS AND ENCODING ALIASES — "NARUSE, Yui" <naruse@...>
成瀬です。
[#33101] String#valid_encoding? shoud be strict? — Masayoshi Takahashi <maki@...>
高橋征義です。1.9のエンコーディングとString#valid_encoding?について。
[#33139] Bignum#* might invoke GC parallelly? — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#33156] default script encoding and -K option — sheepman <sheepman@...>
こんばんは sheepman です。
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#33164] default encoding for Marshal.load — "Shugo Maeda" <shugo@...>
前田です。
まつもと ゆきひろです
[#33185] コンパイルの問題 (r15218) — Martin Duerst <duerst@...>
r15128 当たりで (実はもう少し前から) コンパイルできなくなりました。
[#33218] Re: Ruby1.9String バイト列へのインデックス アクセス — "Hisanori Kiryu" <hkiryu@...>
> ちなみに、byte のではなく bytes の方が妥当だと思います。
[#33224] printf "%0x" — Tanaka Akira <akr@...>
printf の %0x に負の整数を与えると、値によって .. がついたり
[#33226] [PATCH] warnings of enc/trans/utf_16_32.c — Nobuyoshi Nakada <nobu@...>
なかだです。
[#33239] Re: [ruby-cvs:22386] Ruby:r15149 (trunk): * string.c (rb_str_each_char): move forward. — Tanaka Akira <akr@...>
In article <200801210259.m0L2x3CW017171@ci.ruby-lang.org>,
なかだです。
In article <20080121065650.55F60E0662@mail.bc9.jp>,
なかだです。
まつもと ゆきひろです
[#33247] requests to transcode — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#33303] Time#strftimeのエンコーディング — rubikitch@...
るびきちです。
まつもと ゆきひろです
なかだです。
西山和広です。
[#33368] summary of script encoding — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
永井@知能.九工大です.
[#33387] HashからStructを作る — rubikitch@...
るびきちです。
まつもと ゆきひろです
From: Yukihiro Matsumoto <matz@ruby-lang.org>
まつもと ゆきひろです
From: Yukihiro Matsumoto <matz@ruby-lang.org>
まつもと ゆきひろです
From: Yukihiro Matsumoto <matz@ruby-lang.org>
まつもと ゆきひろです
[#33399] regexp match /.../n against to UTF-8 string — Tanaka Akira <akr@...>
以下のように、つけてもいない正規表現の n オプションに関して
[#33400] /#{}/e.encoding — Tanaka Akira <akr@...>
以下のように /#{}/e の encoding が US-ASCII になります。
[#33403] wrapped String#gsub — "Park Ji-In" <tisphie@...>
こんにちは、朴 芝印です。
[#33417] コンパイルの問題 — Martin Duerst <duerst@...>
現在 (r15264 で) コンパイル使用とすると、エラーになります:
At 16:28 08/01/27, you wrote:
[#33433] Win32OLE: set encoding to OLE string — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
成瀬です。
助田です。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#33452] enc/euc_kr.c (euckr_mbc_enc_len) euc_kr.c is also used by CP942 — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
成瀬です。
[#33461] Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...>
=1B$B?9ED$H?=3D$7$^$9!#=1B(B
なかだです。
森田です。
なかだです。
森田です。
天野竜太郎と申します。
森田です。
天野です。
森田です。
天野です。
森田です。
天野です。
森田です。
天野です。
[#33488] 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
成瀬です。
永井@知能.九工大です.
成瀬です。
永井@知能.九工大です.
成瀬です。
In article <47A00E86.4010701@airemix.com>,
成瀬です。
In article <47A03C9D.2090008@airemix.com>,
In article <87hcgvu1ng.fsf@fsij.org>,
[#33521] nkf の CP932 — Martin Duerst <duerst@...>
成瀬さん、皆さん、こんにちは。
[#33548] block parameter of String#gsub — "NARUSE, Yui" <naruse@...>
成瀬です。
まつもと ゆきひろです
[ruby-dev:32922] SEGV by regexp match in while loop
Debian GNU/Linux (sarge) の gcc-3.4 を使ってビルドした ruby
で、以下のようにすると SEGV します。
% svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby
...
% autoconf
% ./configure --prefix=/tmp/a CC=gcc-3.4
...
% make
...
% ./miniruby -ve 'while true; /a/ =~ "a"; end'
ruby 1.9.0 (2008-01-05 revision 0) [i686-linux]
zsh: segmentation fault ./miniruby -ve 'while true; /a/ =~ "a"; end'
スタックサイズを変えると落ちるまでの時間が変わるのでどうもス
タックオーバーフローのようです。
私の試した環境だと、スタックサイズ 8Mbytes の場合数秒で落ち
ます。
以下はスタックサイズを 2Mbytes として調べたものです。
% limit
cputime unlimited
filesize unlimited
datasize unlimited
stacksize 2MB
coredumpsize 0kB
memoryuse unlimited
maxproc 27643
descriptors 1024
memorylocked 32kB
addressspace unlimited
maxfilelocks unlimited
% gdb miniruby
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-linux"...Using host libthread_db library "/lib/tls/libthread_db.so.1".
(gdb) run -ve 'while true; /a/ =~ "a"; end'
Starting program: /tmp/a/ruby/miniruby -ve 'while true; /a/ =~ "a"; end'
[Thread debugging using libthread_db enabled]
[New Thread -1210779968 (LWP 14167)]
[New Thread -1211511888 (LWP 14170)]
ruby 1.9.0 (2008-01-05 revision 0) [i686-linux]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1210779968 (LWP 14167)]
match_at (reg=0x81a7f18, str=0xb7ad5958 "a", end=0xb7ad5959 "", sstart=0xb7ad5958 "a", sprev=0x0, msa=0xbf96bda0)
at regexec.c:1290
1290 STACK_PUSH_ENSURED(STK_ALT, FinishCode); /* bottom stack */
スタックポインタ近辺を調べてみるとたしかにメモリが途切れてい
るようです。
(gdb) p $sp
$1 = (void *) 0xbf96afe0
(gdb) x $sp
0xbf96afe0: Cannot access memory at address 0xbf96afe0
(gdb) x $sp+1
0xbf96afe1: Cannot access memory at address 0xbf96afe1
(gdb) x $sp+4
0xbf96afe4: Cannot access memory at address 0xbf96afe4
(gdb) x $sp+10
0xbf96afea: Cannot access memory at address 0xbf96afea
(gdb) x $sp+100
0xbf96b044: 0x08164f44
しかし、バックトレースを見るとそれほどスタックを消費している
ようには見えません。
(gdb) bt
#0 match_at (reg=0x81a7f18, str=0xb7ad5958 "a", end=0xb7ad5959 "", sstart=0xb7ad5958 "a", sprev=0x0, msa=0xbf96bda0)
at regexec.c:1290
#1 0x080cd9e5 in onig_search (reg=0x81a7f18, str=0xb7ad5958 "a", end=0xb7ad5959 "", start=0xbf96bda0 "",
range=0xb7ad5959 "", region=0x8164f24, option=0) at regexec.c:3608
#2 0x080bdbf3 in rb_reg_search (re=3083514820, str=3081591120, pos=0, reverse=0) at re.c:1069
#3 0x080be85d in reg_match_pos (re=3083514820, strp=0xbf96bed4, pos=0) at re.c:2209
#4 0x080be8c3 in rb_reg_match (re=0, str=3081591120) at re.c:2256
#5 0x08109a85 in vm_eval (th=0x8168160, initial=0) at insns.def:2014
#6 0x0810f3d0 in vm_eval_body (th=0x8168160) at vm.c:1148
#7 0x08110e83 in rb_iseq_eval (iseqval=3083514180) at vm.c:1357
#8 0x08070b9f in ruby_exec_node (n=0xb7cab324, file=0x81a71b1 "-e") at eval.c:229
#9 0x08074099 in ruby_run_node (n=0xb7cab324) at eval.c:259
#10 0x080584f0 in main (argc=3, argv=0xbfb68df4, envp=0xbfb68e04) at main.c:36
各スタックフレームを調べてみると、どうも、vm_eval のスタック
フレームが激しく大きいようです。
(gdb) up
#1 0x080cd9e5 in onig_search (reg=0x81a7f18, str=0xb7ad5958
"a", end=0xb7ad5959 "", start=0xbf96bda0 "",
range=0xb7ad5959 "", region=0x8164f24, option=0) at
regexec.c:3608
3608 MATCH_AND_RETURN_CHECK(orig_range);
(gdb)
#2 0x080bdbf3 in rb_reg_search (re=3083514820,
str=3081591120, pos=0, reverse=0) at re.c:1069
1069 result = onig_search(RREGEXP(re)->ptr,
(gdb)
#3 0x080be85d in reg_match_pos (re=3083514820,
strp=0xbf96bed4, pos=0) at re.c:2209
2209 return rb_reg_search(re, str, pos, 0);
(gdb)
#4 0x080be8c3 in rb_reg_match (re=0, str=3081591120) at
re.c:2256
2256 long pos = reg_match_pos(re, &str, 0);
(gdb)
#5 0x08109a85 in vm_eval (th=0x8168160, initial=0) at
insns.def:2014
2014 val = rb_reg_match(r, obj);
(gdb) p $sp
$3 = (void *) 0xbf96bed0
(gdb) p $fp
$4 = (void *) 0xbfb68ab8
(gdb) p $fp-$sp
$5 = 2083816
想像するに、vm_eval のループの中でスタックをどんどん動的に確
保していくようなことになっているんじゃないでしょうか。
なお、Debian GNU/Linux (etch) の gcc-3.4 では再現しませんで
した。
--
[田中 哲][たなか あきら][Tanaka Akira]