[ruby-dev:31850] meta programming might dump core

From: "Yusuke ENDOH" <mame@...>
Date: 2007-09-24 17:49:24 UTC
List: ruby-dev #31850
遠藤と申します。

くだらない報告ばかりで恐縮ですが、[ruby-dev:31848] と似たようなバグを
適当に探してみました。1.9 ばっかりです。

# 原因を調べる気力が無いので報告だけですみません。



約 100 万エントリのハッシュリテラル:

$ time ./ruby -ve 'eval("{" + "0=>0," * 1000000 + "0=>0}")'
ruby 1.9.0 (2007-09-24 patchlevel 0) [i686-linux]
(eval):1: -- control frame ----------
c:0006 p:261958 s:302670847 b:0012 l:000004 d:000011 EVAL   (eval):1
c:0005 p:---- s:0011 b:0011 l:000010 d:000010 FINISH :new
c:0004 p:---- s:0009 b:0009 l:000008 d:000008 CFUNC  :eval
c:0003 p:0018 s:0005 b:0005 l:000004 d:000004 TOP    -e:1
c:0002 p:---- s:0003 b:0003 l:000002 d:000002 FINISH :inherited
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
---------------------------
SEGV recieved in SEGV handler

real    0m13.298s
user    0m6.130s
sys     0m6.510s



約 100 万変数の多重代入:

$ time ./ruby -ve 'p eval("x," * 1000000 + "=0")'
ruby 1.9.0 (2007-09-24 patchlevel 0) [i686-linux]
(eval):1: -- control frame ----------
c:0006 p:0006 s:1000015 b:0014 l:000004 d:000013 EVAL   (eval):1
c:0005 p:---- s:0012 b:0012 l:000011 d:000011 FINISH :new
c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC  :eval
c:0003 p:0016 s:0006 b:0005 l:000004 d:000004 TOP    -e:1
c:0002 p:---- s:0003 b:0003 l:000002 d:000002 FINISH :inherited
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
---------------------------
SEGV recieved in SEGV handler

real    0m8.164s
user    0m3.510s
sys     0m4.580s



約 100 万引数のメソッド呼び出し:

$ time ./ruby -ve 'def foo(*a); end; eval("foo(" + "0," * 1000000 + "0)")'
ruby 1.9.0 (2007-09-24 patchlevel 0) [i686-linux]
(eval):1: -- control frame ----------
c:0006 p:261957 s:302705663 b:0012 l:000004 d:000011 EVAL   (eval):1
c:0005 p:---- s:0011 b:0011 l:000010 d:000010 FINISH :new
c:0004 p:---- s:0009 b:0009 l:000008 d:000008 CFUNC  :eval
c:0003 p:0018 s:0005 b:0005 l:000004 d:000004 TOP    -e:1
c:0002 p:---- s:0003 b:0003 l:000002 d:000002 FINISH :inherited
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
---------------------------
SEGV recieved in SEGV handler

real    0m6.178s
user    0m2.910s
sys     0m3.200s



false が || で 25000 個連なった式:

$ time ./ruby -ve 'eval("false||" * 25000 + "true")'
ruby 1.9.0 (2007-09-24 patchlevel 0) [i686-linux]
セグメンテーション違反です

real    0m3.888s
user    0m3.390s
sys     0m0.490s

--
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread

Prev Next