yarv-dev:937
From: Minero Aoki <aamine loveruby.net>
Date: Mon, 20 Feb 2006 11:27:58 +0900 (JST)
Subject: [yarv-dev:937] open> calling uninitialized Proc
青木です。
以下のプログラムで落ちます。
~/c/yarv % cat t
Proc.new{}.dup.call
~/c/yarv % ruby -v t
ruby 1.9.0 (2006-02-14) [x86_64-linux]
~/c/yarv % ./ruby -v t
ruby 1.9.0 (2006-02-14) [x86_64-linux]
YARVCore 0.3.3 (rev: 438) [opts: ]
DBG> : "t:1:in `<main>'"
-- stack frame ------------
0x2a95ee2010 (0000): 00000001
0x2a95ee2018 (0001): 00000004
0x2a95ee2020 (0002): 2a95eaf298
0x2a95ee2028 (0003): 2a95eaf248
0x2a95ee2030 (0004): 00000001 <- lfp <- dfp
-- control frame ----------
c:0004 p:-001 s:0005 b:0005 l:0004 d:0004 CFUNC i:call s: -
c:0003 p:0025 s:0003 b:0003 l:-053 d:-053 TOP i:<main> s:
c:0002 p:-001 s:0001 b:0001 l:0000 d:0000 FINISH i:- s: -
c:0001 p:-001 s:0000 b:-001 l:0000 d:0000 ------ i:- s: -
---------------------------
[BUG] Segmentation fault
ruby 1.9.0 (2006-02-14) [x86_64-linux]
原因は typo のせいで Proc#dup が定義されていないことだと思います。
(これは修正してコミットしておきました)。
ただし、以下のような類似バグがあるので、いずれにしても initialize
されていない Proc への対策は必要です。
~/c/yarv % ./ruby -e 'Proc.allocate.call'
DBG> : "-e:1:in `<main>'"
-- stack frame ------------
0x2a95ee2010 (0000): 00000001
0x2a95ee2018 (0001): 00000004
0x2a95ee2020 (0002): 2a95eaf4a0
0x2a95ee2028 (0003): 2a95eaf478
0x2a95ee2030 (0004): 00000001 <- lfp <- dfp
-- control frame ----------
c:0004 p:-001 s:0005 b:0005 l:0004 d:0004 CFUNC i:call s: -
c:0003 p:0019 s:0003 b:0003 l:-101 d:-101 TOP i:<main> s: -
c:0002 p:-001 s:0001 b:0001 l:0000 d:0000 FINISH i:- s: -
c:0001 p:-001 s:0000 b:-001 l:0000 d:0000 ------ i:- s: -
---------------------------
[BUG] Segmentation fault
ruby 1.9.0 (2006-02-14) [x86_64-linux]
また以下のコードは落ちませんが、false と出るのが変です。
~/c/yarv % ./ruby -e 'eval("", binding().dup)'
-e:1:in `eval': -e:1:in `eval': wrong argument type false (expected Data) (TypeError)
from -e:1:in `<main>'
--
青木峰郎
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
-> 937 2006-02-20 11:27 [aamine loveruby.net ] open> calling uninitialized Proc 939 2006-02-20 18:21 ┗[ko1 atdot.net ] fixed> Re: open> calling uninitialized Proc