Project

General

Profile

Actions

Bug #1329

closed

Ruby 1.8.8 で "p eval('0' + '+0.1'*n)" が Segmentation Fault を発生させる

Added by mrkn (Kenta Murata) about 15 years ago. Updated over 4 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0]

Description

=begin
"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
=end

Actions #1

Updated by mrkn (Kenta Murata) about 15 years ago

=begin
古いリビジョンで試していたことに気付いて、最新のリビジョンでもう一度やってみました。
その結果、以下に示すように、症状は変わっていませんでした。

$ ~/ruby-1.8.8-r23088/bin/ruby -ve "p eval('0'+'+0.1'*4581)"
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
458.100000000036
$ ~/ruby-1.8.8-r23088/bin/ruby -ve "p eval('0'+'+0.1'*4582)"
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
-e:1: can't modify frozen string (TypeError)
$ ~/ruby-1.8.8-r23088/bin/ruby -ve "p eval('0'+'+0.1'*5132)"
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
-e:1: can't modify frozen string (TypeError)
$ ~/ruby-1.8.8-r23088/bin/ruby -ve "p eval('0'+'+0.1'*5133)"
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
Segmentation fault

$ ~/ruby-1.8.8-r23088/bin/ruby -ve "'0'+'+0.1'*5133"
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
-e:1: warning: useless use of + in void context
=end

Actions #2

Updated by nobu (Nobuyoshi Nakada) about 15 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
Applied in changeset r23096.
=end

Actions #3

Updated by shyouhei (Shyouhei Urabe) almost 15 years ago

  • Status changed from Closed to Open
  • Assignee set to shyouhei (Shyouhei Urabe)

=begin

=end

Actions #4

Updated by shyouhei (Shyouhei Urabe) almost 15 years ago

  • Assignee changed from shyouhei (Shyouhei Urabe) to wyhaines (Kirk Haines)

=begin
1.8.6 also has this problem.
=end

Actions #5

Updated by shyouhei (Shyouhei Urabe) over 13 years ago

  • Status changed from Open to Assigned

=begin

=end

Actions #6

Updated by jeremyevans0 (Jeremy Evans) over 4 years ago

  • Tracker changed from Backport to Bug
  • Project changed from Backport186 to Ruby master
  • Description updated (diff)
  • Status changed from Assigned to Closed
  • ruby -v set to ruby 1.8.8dev (2009-03-19) [i386-darwin9.6.0]
  • Backport set to 2.5: UNKNOWN, 2.6: UNKNOWN
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0