[ruby-core:114328] [Ruby master Bug#19793] Segmentation fault with large arrays

Issue #19793 has been reported by sczimmer (Scott Zimmermann). ---------------------------------------- Bug #19793: Segmentation fault with large arrays https://bugs.ruby-lang.org/issues/19793 * Author: sczimmer (Scott Zimmermann) * Status: Open * Priority: Normal * ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [aarch64-linux] * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- I was doing ruby koans to learn ruby and I got a segmentation fault when it gets to the part where it uses `Symbol.all_symbols`. I realized it happens with any large Array, but I cannot reproduce in a small test script, just when it runs the whole ruby koans. So the minimal way to reproduce I have is: download rubykoans: https://github.com/edgecase/ruby_koans/blob/master/download/rubykoans.zip?ra... ``` unzip rubykoans.zip cd koans # fix deprecated method call for ruby 3.2 ruby -i -pe 'sub "File.exists", "File.exist"' neo.rb ``` Edit about_asserts.rb, adding these two statements to make a big array to the first koan: ``` def test_assert_truth array = [] 99130.times { array << "a string"} assert false # This should be true end ``` run `ruby path_to_enlightenment.rb` and get a backtrace like the attached backtrace.txt I've tried this on two servers, ubuntu aarch64 and debian x86_64. On both it crashes with ruby 3.2.2 and works fine with ruby 3.1. On both I installed ruby built from source with RVM. On the server with more ram I had to increase the number more (above it's 99130) to get it to crash. ---Files-------------------------------- backtrace.txt (21.7 KB) -- https://bugs.ruby-lang.org/

Issue #19793 has been updated by byroot (Jean Boussier). So instead of `99130.times { array << "a string"}` you can just add `GC.start` and it will also crash. I also tested it's still failing on master. I'll see if this can be reduced. ---------------------------------------- Bug #19793: Segmentation fault with large arrays https://bugs.ruby-lang.org/issues/19793#change-104031 * Author: sczimmer (Scott Zimmermann) * Status: Open * Priority: Normal * ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [aarch64-linux] * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- I was doing ruby koans to learn ruby and I got a segmentation fault when it gets to the part where it uses `Symbol.all_symbols`. I realized it happens with any large Array, but I cannot reproduce in a small test script, just when it runs the whole ruby koans. So the minimal way to reproduce I have is: download rubykoans: https://github.com/edgecase/ruby_koans/blob/master/download/rubykoans.zip?ra... ``` unzip rubykoans.zip cd koans # fix deprecated method call for ruby 3.2 ruby -i -pe 'sub "File.exists", "File.exist"' neo.rb ``` Edit about_asserts.rb, adding these two statements to make a big array to the first koan: ``` def test_assert_truth array = [] 99130.times { array << "a string"} assert false # This should be true end ``` run `ruby path_to_enlightenment.rb` and get a backtrace like the attached backtrace.txt I've tried this on two servers, ubuntu aarch64 and debian x86_64. On both it crashes with ruby 3.2.2 and works fine with ruby 3.1. On both I installed ruby built from source with RVM. On the server with more ram I had to increase the number more (above it's 99130) to get it to crash. ---Files-------------------------------- backtrace.txt (21.7 KB) -- https://bugs.ruby-lang.org/

Issue #19793 has been updated by peterzhu2118 (Peter Zhu). Thank you for reporting this bug. The following script is a minimal reproduction: ```ruby GC.stress = true class Object public :method_missing end File.write("/tmp/empty.rb", "") require "/tmp/empty.rb" ``` I have a fix in this PR: https://github.com/ruby/ruby/pull/8155 ---------------------------------------- Bug #19793: Segmentation fault with large arrays https://bugs.ruby-lang.org/issues/19793#change-104032 * Author: sczimmer (Scott Zimmermann) * Status: Open * Priority: Normal * ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [aarch64-linux] * Backport: 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- I was doing ruby koans to learn ruby and I got a segmentation fault when it gets to the part where it uses `Symbol.all_symbols`. I realized it happens with any large Array, but I cannot reproduce in a small test script, just when it runs the whole ruby koans. So the minimal way to reproduce I have is: download rubykoans: https://github.com/edgecase/ruby_koans/blob/master/download/rubykoans.zip?ra... ``` unzip rubykoans.zip cd koans # fix deprecated method call for ruby 3.2 ruby -i -pe 'sub "File.exists", "File.exist"' neo.rb ``` Edit about_asserts.rb, adding these two statements to make a big array to the first koan: ``` def test_assert_truth array = [] 99130.times { array << "a string"} assert false # This should be true end ``` run `ruby path_to_enlightenment.rb` and get a backtrace like the attached backtrace.txt I've tried this on two servers, ubuntu aarch64 and debian x86_64. On both it crashes with ruby 3.2.2 and works fine with ruby 3.1. On both I installed ruby built from source with RVM. On the server with more ram I had to increase the number more (above it's 99130) to get it to crash. ---Files-------------------------------- backtrace.txt (21.7 KB) -- https://bugs.ruby-lang.org/

Issue #19793 has been updated by sczimmer (Scott Zimmermann). thanks, you all are fast :) ---------------------------------------- Bug #19793: Segmentation when requiring files after defining Object#method_missing https://bugs.ruby-lang.org/issues/19793#change-104035 * Author: sczimmer (Scott Zimmermann) * Status: Open * Priority: Normal * ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [aarch64-linux] * Backport: 3.0: DONTNEED, 3.1: DONTNEED, 3.2: REQUIRED ---------------------------------------- I was doing ruby koans to learn ruby and I got a segmentation fault when it gets to the part where it uses `Symbol.all_symbols`. I realized it happens with any large Array, but I cannot reproduce in a small test script, just when it runs the whole ruby koans. So the minimal way to reproduce I have is: download rubykoans: https://github.com/edgecase/ruby_koans/blob/master/download/rubykoans.zip?ra... ``` unzip rubykoans.zip cd koans # fix deprecated method call for ruby 3.2 ruby -i -pe 'sub "File.exists", "File.exist"' neo.rb ``` Edit about_asserts.rb, adding these two statements to make a big array to the first koan: ``` def test_assert_truth array = [] 99130.times { array << "a string"} assert false # This should be true end ``` run `ruby path_to_enlightenment.rb` and get a backtrace like the attached backtrace.txt I've tried this on two servers, ubuntu aarch64 and debian x86_64. On both it crashes with ruby 3.2.2 and works fine with ruby 3.1. On both I installed ruby built from source with RVM. On the server with more ram I had to increase the number more (above it's 99130) to get it to crash. ---Files-------------------------------- backtrace.txt (21.7 KB) -- https://bugs.ruby-lang.org/

Issue #19793 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 3.0: DONTNEED, 3.1: DONTNEED, 3.2: REQUIRED to 3.0: DONTNEED, 3.1: DONE, 3.2: REQUIRED ruby_3_1 3c9cb7031154b8666d600b0055ba868e18805dc8 merged revision(s) 1d096c1e53581ed9fe94694c9760babd1e12e580. ---------------------------------------- Bug #19793: Segmentation fault when requiring files after defining Object#method_missing https://bugs.ruby-lang.org/issues/19793#change-104130 * Author: sczimmer (Scott Zimmermann) * Status: Closed * Priority: Normal * ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [aarch64-linux] * Backport: 3.0: DONTNEED, 3.1: DONE, 3.2: REQUIRED ---------------------------------------- I was doing ruby koans to learn ruby and I got a segmentation fault when it gets to the part where it uses `Symbol.all_symbols`. I realized it happens with any large Array, but I cannot reproduce in a small test script, just when it runs the whole ruby koans. So the minimal way to reproduce I have is: download rubykoans: https://github.com/edgecase/ruby_koans/blob/master/download/rubykoans.zip?ra... ``` unzip rubykoans.zip cd koans # fix deprecated method call for ruby 3.2 ruby -i -pe 'sub "File.exists", "File.exist"' neo.rb ``` Edit about_asserts.rb, adding these two statements to make a big array to the first koan: ``` def test_assert_truth array = [] 99130.times { array << "a string"} assert false # This should be true end ``` run `ruby path_to_enlightenment.rb` and get a backtrace like the attached backtrace.txt I've tried this on two servers, ubuntu aarch64 and debian x86_64. On both it crashes with ruby 3.2.2 and works fine with ruby 3.1. On both I installed ruby built from source with RVM. On the server with more ram I had to increase the number more (above it's 99130) to get it to crash. ---Files-------------------------------- backtrace.txt (21.7 KB) -- https://bugs.ruby-lang.org/

Issue #19793 has been updated by nagachika (Tomoyuki Chikanaga). Backport changed from 3.0: DONTNEED, 3.1: DONE, 3.2: REQUIRED to 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONE ruby_3_2 3c9cb7031154b8666d600b0055ba868e18805dc8 merged revision(s) 1d096c1e53581ed9fe94694c9760babd1e12e580. ---------------------------------------- Bug #19793: Segmentation fault when requiring files after defining Object#method_missing https://bugs.ruby-lang.org/issues/19793#change-104131 * Author: sczimmer (Scott Zimmermann) * Status: Closed * Priority: Normal * ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [aarch64-linux] * Backport: 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONE ---------------------------------------- I was doing ruby koans to learn ruby and I got a segmentation fault when it gets to the part where it uses `Symbol.all_symbols`. I realized it happens with any large Array, but I cannot reproduce in a small test script, just when it runs the whole ruby koans. So the minimal way to reproduce I have is: download rubykoans: https://github.com/edgecase/ruby_koans/blob/master/download/rubykoans.zip?ra... ``` unzip rubykoans.zip cd koans # fix deprecated method call for ruby 3.2 ruby -i -pe 'sub "File.exists", "File.exist"' neo.rb ``` Edit about_asserts.rb, adding these two statements to make a big array to the first koan: ``` def test_assert_truth array = [] 99130.times { array << "a string"} assert false # This should be true end ``` run `ruby path_to_enlightenment.rb` and get a backtrace like the attached backtrace.txt I've tried this on two servers, ubuntu aarch64 and debian x86_64. On both it crashes with ruby 3.2.2 and works fine with ruby 3.1. On both I installed ruby built from source with RVM. On the server with more ram I had to increase the number more (above it's 99130) to get it to crash. ---Files-------------------------------- backtrace.txt (21.7 KB) -- https://bugs.ruby-lang.org/
participants (4)
-
byroot (Jean Boussier)
-
nagachika (Tomoyuki Chikanaga)
-
peterzhu2118 (Peter Zhu)
-
sczimmer (Scott Zimmermann)