From: Run Paint Run Run Date: 2009-09-23T00:22:22+09:00 Subject: [ruby-core:25714] [Bug #2133] Segfault When Eval'ing Large Hash Literals Bug #2133: Segfault When Eval'ing Large Hash Literals http://redmine.ruby-lang.org/issues/show/2133 Author: Run Paint Run Run Status: Open, Priority: Normal Category: core, Target version: 1.9.2 ruby -v: ruby 1.9.2dev (2009-09-11) [i686-linux] I can reproduce a segfault on ruby 1.9.2dev (2009-09-11) [i686-linux] by creating a hash with many thousands of keys, then eval'ing the result. $ cat /tmp/large-hash.rb hash = {} IO.foreach('/usr/share/dict/words') do |line| hash[line] = line.size end p "Hashed #{hash.keys.size} keys" eval <' /tmp/large-hash.rb:6:in `eval' (eval):1:in `
' (eval):2:in `' -- C level backtrace information ------------------------------------------- ruby(rb_vm_bugreport+0xb5) [0x8167535] ruby [0x81a3fcb] ruby(rb_bug+0x28) [0x81a4058] ruby [0x80fb585] [0xb7f29410] ruby [0x815e884] ruby [0x815f5c0] ruby(rb_f_eval+0xe1) [0x815fbd1] ruby [0x81537cd] ruby [0x8153919] ruby [0x8165555] ruby [0x81595fd] ruby [0x815e884] ruby(rb_iseq_eval_main+0x1a3) [0x815eb73] ruby(ruby_exec_node+0x97) [0x805d797] ruby(ruby_run_node+0x46) [0x805f0d6] ruby(main+0x60) [0x805cbb0] /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5) [0xb7d49775] ruby [0x805cab1] [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html (My dictionary is 6.5MB, so I haven't attached it.) The same problem is encountered when the contents of the heredoc is piped to a file which is then require'd, also. It is relevant that the hash is instantiated inside of a class; in the example below a segfault does not occur: $ cat /tmp/large-hash.rb hash = {} IO.foreach('/usr/share/dict/words') do |line| hash[line] = line.size end p "Hashed #{hash.keys.size} keys" eval "h = #{hash.inspect}" $ ruby /tmp/large-hash.rb "Hashed 638311 keys" (eval):0:in `
': stack level too deep (SystemStackError) from /tmp/large-hash.rb:6:in `eval' from /tmp/large-hash.rb:6:in `
' ---------------------------------------- http://redmine.ruby-lang.org