[ruby-core:32830] [Ruby 1.9-Bug#3957][Open] instance_exec and instance_eval crash ruby when passed '&variable' which stores a 'method(:whatever).to_param'

From: Lori Holden <redmine@...>
Date: 2010-10-17 15:03:54 UTC
List: ruby-core #32830
Bug #3957: instance_exec and instance_eval crash ruby when passed '&variable' which stores a 'method(:whatever).to_param'
http://redmine.ruby-lang.org/issues/show/3957

Author: Lori Holden
Status: Open, Priority: Normal
Category: core, Target version: 1.9.2
ruby -v: ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]

# results in a crash:
def a_method; end
a = method(:a_method).to_proc
instance_exec &a

# however works:
def a_method; end
instance_exec &(method(:a_method).to_proc)


----------------------------------------
http://redmine.ruby-lang.org

Attachments (1)

backtrace.txt (6.83 KB, text/plain)
ruby-1.9.2-p0 > def a_method; end
 => nil 
ruby-1.9.2-p0 > a = method(:a_method).to_proc
 => #<Proc:0x000001010e4b90 (lambda)> 
ruby-1.9.2-p0 > instance_exec &a
(irb):6: [BUG] vm_get_cref: unreachable
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]

-- control frame ----------
c:0024 p:---- s:0085 b:0085 l:000084 d:000084 CFUNC  :instance_exec
c:0023 p:0012 s:0082 b:0082 l:001dc8 d:000081 EVAL   (irb):6
c:0022 p:---- s:0080 b:0080 l:000079 d:000079 FINISH
c:0021 p:---- s:0078 b:0078 l:000077 d:000077 CFUNC  :eval
c:0020 p:0028 s:0071 b:0071 l:000070 d:000070 METHOD /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/workspace.rb:80
c:0019 p:0033 s:0064 b:0063 l:000062 d:000062 METHOD /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/context.rb:254
c:0018 p:0031 s:0058 b:0058 l:000b68 d:000057 BLOCK  /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:159
c:0017 p:0042 s:0050 b:0050 l:000049 d:000049 METHOD /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:273
c:0016 p:0011 s:0045 b:0045 l:000b68 d:000044 BLOCK  /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:156
c:0015 p:0144 s:0041 b:0041 l:000024 d:000040 BLOCK  /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:243
c:0014 p:---- s:0038 b:0038 l:000037 d:000037 FINISH
c:0013 p:---- s:0036 b:0036 l:000035 d:000035 CFUNC  :loop
c:0012 p:0009 s:0033 b:0033 l:000024 d:000032 BLOCK  /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:229
c:0011 p:---- s:0031 b:0031 l:000030 d:000030 FINISH
c:0010 p:---- s:0029 b:0029 l:000028 d:000028 CFUNC  :catch
c:0009 p:0023 s:0025 b:0025 l:000024 d:000024 METHOD /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:228
c:0008 p:0046 s:0022 b:0022 l:000b68 d:000b68 METHOD /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:155
c:0007 p:0011 s:0019 b:0019 l:000f98 d:000018 BLOCK  /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:70
c:0006 p:---- s:0017 b:0017 l:000016 d:000016 FINISH
c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC  :catch
c:0004 p:0183 s:0011 b:0011 l:000f98 d:000f98 METHOD /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:69
c:0003 p:0177 s:0006 b:0006 l:0015a8 d:000838 EVAL   /Users/Lori/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:0015a8 d:0015a8 TOP   
---------------------------
-- Ruby level backtrace information ----------------------------------------
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:69:in `start'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:69:in `catch'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:70:in `block in start'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:155:in `eval_input'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:156:in `block in eval_input'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:273:in `signal_status'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb.rb:159:in `block (2 levels) in eval_input'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/context.rb:254:in `evaluate'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/workspace.rb:80:in `evaluate'
/Users/Lori/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/irb/workspace.rb:80:in `eval'
(irb):6:in `irb_binding'
(irb):6:in `instance_exec'

-- C level backtrace information -------------------------------------------
0   libruby.1.9.1.dylib                 0x000000010018b9d2 rb_vm_bugreport + 210
1   libruby.1.9.1.dylib                 0x0000000100045d04 report_bug + 372
2   libruby.1.9.1.dylib                 0x0000000100045ec8 rb_bug + 200
3   libruby.1.9.1.dylib                 0x000000010016fb5b vm_cref_push + 331
4   libruby.1.9.1.dylib                 0x000000010018905b yield_under + 139
5   libruby.1.9.1.dylib                 0x0000000100171487 vm_call_method + 983
6   libruby.1.9.1.dylib                 0x0000000100174215 vm_exec_core + 8293
7   libruby.1.9.1.dylib                 0x000000010017be53 vm_exec + 1507
8   libruby.1.9.1.dylib                 0x000000010017c67e eval_string_with_cref + 878
9   libruby.1.9.1.dylib                 0x000000010017cda2 rb_f_eval + 242
10  libruby.1.9.1.dylib                 0x0000000100171487 vm_call_method + 983
11  libruby.1.9.1.dylib                 0x0000000100174215 vm_exec_core + 8293
12  libruby.1.9.1.dylib                 0x000000010017be53 vm_exec + 1507
13  libruby.1.9.1.dylib                 0x0000000100188ec1 loop_i + 545
14  libruby.1.9.1.dylib                 0x000000010004ae67 rb_rescue2 + 519
15  libruby.1.9.1.dylib                 0x000000010016dc46 rb_f_loop + 54
16  libruby.1.9.1.dylib                 0x0000000100171487 vm_call_method + 983
17  libruby.1.9.1.dylib                 0x0000000100174215 vm_exec_core + 8293
18  libruby.1.9.1.dylib                 0x000000010017be53 vm_exec + 1507
19  libruby.1.9.1.dylib                 0x00000001001899e1 catch_i + 577
20  libruby.1.9.1.dylib                 0x000000010016d0d5 rb_catch_obj + 325
21  libruby.1.9.1.dylib                 0x000000010016db00 rb_f_catch + 48
22  libruby.1.9.1.dylib                 0x0000000100171487 vm_call_method + 983
23  libruby.1.9.1.dylib                 0x0000000100174215 vm_exec_core + 8293
24  libruby.1.9.1.dylib                 0x000000010017be53 vm_exec + 1507
25  libruby.1.9.1.dylib                 0x00000001001899e1 catch_i + 577
26  libruby.1.9.1.dylib                 0x000000010016d0d5 rb_catch_obj + 325
27  libruby.1.9.1.dylib                 0x000000010016db00 rb_f_catch + 48
28  libruby.1.9.1.dylib                 0x0000000100171487 vm_call_method + 983
29  libruby.1.9.1.dylib                 0x0000000100174215 vm_exec_core + 8293
30  libruby.1.9.1.dylib                 0x000000010017be53 vm_exec + 1507
31  libruby.1.9.1.dylib                 0x000000010017c158 rb_iseq_eval_main + 504
32  libruby.1.9.1.dylib                 0x000000010004b0d2 ruby_exec_internal + 178
33  libruby.1.9.1.dylib                 0x000000010004da5c ruby_run_node + 60
34  ruby                                0x0000000100000ecf main + 79
35  ruby                                0x0000000100000e74 start + 52

[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

Abort trap

In This Thread

Prev Next