From: Kenta Murata Date: 2009-03-30T05:58:09+09:00 Subject: [ruby-dev:38208] [Bug #1329] Ruby 1.8.8 で "p eval('0' + '+0.1'*n)" が Segmentation Fault を発生させる Bug #1329: Ruby 1.8.8 で "p eval('0' + '+0.1'*n)" が Segmentation Fault を発生させる http://redmine.ruby-lang.org/issues/show/1329 起票者: Kenta Murata ステータス: Open, 優先度: Normal カテゴリ: core, Target version: Ruby 1.8.8 ruby -v: ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0] "p eval('0' + '+0.1'*n)" を評価すると、 n がある値 N1 を超えたときに TypeError が、 N2 を超えたときに Segmentation Fault が発生します。 N1 と N2 がアーキテクチャに依存するかどうかは調べてません。 $ ~/ruby-1.8.8-r23009/bin/ruby -ve "p eval('0'+'+0.1'*4581)" ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0] 458.100000000036 $ ~/ruby-1.8.8-r23009/bin/ruby -ve "p eval('0'+'+0.1'*4582)" ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0] -e:1: can't modify frozen string (TypeError) $ ~/ruby-1.8.8-r23009/bin/ruby -ve "p eval('0'+'+0.1'*5132)" ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0] -e:1: can't modify frozen string (TypeError) $ ~/ruby-1.8.8-r23009/bin/ruby -ve "p eval('0'+'+0.1'*5133)" ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0] Segmentation fault eval しなければ TypeError も SEGV も発生しないことは確認済です。 $ ~/ruby-1.8.8-r23009/bin/ruby -ve "'0'+'+0.1'*5133" ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0] -e:1: warning: useless use of + in void context ---------------------------------------- http://redmine.ruby-lang.org