diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-18 11:38:01 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-07-18 11:38:01 +0000 |
commit | e1335a307c859f612d666245bf891436da8fdd86 (patch) | |
tree | 8c8c74fbaa0c43e568e214c840733b380a148996 /test/ruby/test_array.rb | |
parent | 6f49bc635bd6b0f049d4dacc2b9e46ff82d24866 (diff) | |
download | ruby-e1335a307c859f612d666245bf891436da8fdd86.tar.gz |
* array.c (rb_ary_count): check length to avoid SEGV
while iterating. Remove other pointer loop when arg is given.
* test/ruby/test_array.rb (test_count): add test for bug.
[ruby-core:56072] [Bug #8654]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42041 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_array.rb')
-rw-r--r-- | test/ruby/test_array.rb | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index 93ef59a3f5..b158db0ec9 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -572,6 +572,16 @@ class TestArray < Test::Unit::TestCase assert_equal(3, a.count {|x| x % 2 == 1 }) assert_equal(2, a.count(1) {|x| x % 2 == 1 }) assert_raise(ArgumentError) { a.count(0, 1) } + + bug8654 = '[ruby-core:56072]' + assert_in_out_err [], <<-EOS, ["0"], [], bug8654 + a1 = [] + a2 = Array.new(100) { |i| i } + r = a2.count do |i| + p i + a2.replace(a1) if i == 0 + end + EOS end def test_delete |