[#32945] Shift_JIS variants and UTF-16 support — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

22 messages 2008/01/07
[#32953] Re: Shift_JIS variants and UTF-16 support — Martin Duerst <duerst@...> 2008/01/07

中村さん、こんにちは。

[#32955] Re: Shift_JIS variants and UTF-16 support — Yukihiro Matsumoto <matz@...> 2008/01/07

まつもと ゆきひろです

[#32959] Re: Shift_JIS variants and UTF-16 support — "NARUSE, Yui" <naruse@...> 2008/01/07

成瀬です。

[#32960] Re: Shift_JIS variants and UTF-16 support — Yukihiro Matsumoto <matz@...> 2008/01/07

まつもと ゆきひろです

[#32992] ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...>

成瀬です。

18 messages 2008/01/08
[#32994] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/09

まつもと ゆきひろです

[#32995] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Martin Duerst <duerst@...> 2008/01/09

At 18:13 08/01/09, Yukihiro Matsumoto wrote:

[#33011] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...> 2008/01/11

成瀬です。

[#33012] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/11

まつもと ゆきひろです

[#33014] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...> 2008/01/11

成瀬です。

[#33015] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/11

まつもと ゆきひろです

[#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>,

11 messages 2008/01/21
[#33240] Re: [ruby-cvs:22386] Ruby:r15149 (trunk): * string.c (rb_str_each_char): move forward. — Nobuyoshi Nakada <nobu@...> 2008/01/21

なかだです。

[#33303] Time#strftimeのエンコーディング — rubikitch@...

るびきちです。

13 messages 2008/01/23
[#33305] Re: Time#strftimeのエンコーディング — Yukihiro Matsumoto <matz@...> 2008/01/23

まつもと ゆきひろです

[#33368] summary of script encoding — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

22 messages 2008/01/25
[#33375] Re: summary of script encoding — Yukihiro Matsumoto <matz@...> 2008/01/25

まつもと ゆきひろです

[#33376] Re: summary of script encoding — "U.Nakamura" <usa@...> 2008/01/25

こんにちは、なかむら(う)です。

[#33387] HashからStructを作る — rubikitch@...

るびきちです。

19 messages 2008/01/25
[#33455] Re: HashからStructを作る — Yukihiro Matsumoto <matz@...> 2008/01/28

まつもと ゆきひろです

[#33505] Re: HashからStructを作る — rubikitch@... 2008/01/29

From: Yukihiro Matsumoto <matz@ruby-lang.org>

[#33507] Re: HashからStructを作る — Yukihiro Matsumoto <matz@...> 2008/01/29

まつもと ゆきひろです

[#33508] Re: HashからStructを作る — rubikitch@... 2008/01/29

From: Yukihiro Matsumoto <matz@ruby-lang.org>

[#33433] Win32OLE: set encoding to OLE string — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

16 messages 2008/01/28

[#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

19 messages 2008/01/28
[#33473] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Nobuyoshi Nakada <nobu@...> 2008/01/28

なかだです。

[#33503] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/29

森田です。

[#33514] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Nobuyoshi Nakada <nobu@...> 2008/01/29

なかだです。

[#33518] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/30

森田です。

[#33545] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Ryutaro Amano <wn9r-amn@...> 2008/01/31

天野竜太郎と申します。

[#33546] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/31

森田です。

[#33547] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Ryutaro Amano <wn9r-amn@...> 2008/01/31

天野です。

[#33551] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/31

森田です。

[#33488] 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

20 messages 2008/01/29
[#33491] Re: 現在の script encoding の値を得る方法は? — Yukihiro Matsumoto <matz@...> 2008/01/29

まつもと ゆきひろです

[#33500] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/29

永井@知能.九工大です.

[#33501] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/29

成瀬です。

[#33515] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/30

永井@知能.九工大です.

[#33516] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/30

成瀬です。

[#33519] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/30

永井@知能.九工大です.

[#33522] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/30

成瀬です。

[ruby-dev:32922] SEGV by regexp match in while loop

From: Tanaka Akira <akr@...>
Date: 2008-01-04 18:28:54 UTC
List: ruby-dev #32922
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]

In This Thread

Prev Next