From: Frederick Cheung Date: 2007-12-29T05:00:35+09:00 Subject: crash on 1.9 when using class_eval on a string with a syntax error It seems that in 1.9 (r14776) using class_eval on a string with a syntax error can cause a crash in certain cases instead of raising SyntaxError The following crashes when ran in irb in 1.9 (or when run as part of the larger application I found this in): class Foo def self.add_method class_eval("def some-bad-name; puts 'hello' unless @some_variable.some_function(''); end") end end Foo.add_method If I paste it in a file and run that then the ruby process blocks using 100% cpu. In both cases if I make the call to some_function take no arguments then behaviour is the same as with 1.8 (ie raises SyntaxError). Fred Backtrace for when it did crash: (irb):3: [BUG] Bus Error ruby 1.9.0 (2007-12-29 revision 0) [i686-darwin9.1.0] -- control frame ---------- c:0025 p:---- s:0076 b:0076 l:000075 d:000075 CFUNC :class_eval c:0024 p:0009 s:0072 b:0072 l:000071 d:000071 METHOD (irb):3 c:0023 p:0013 s:0069 b:0069 l:0007f4 d:000068 EVAL (irb):6 c:0022 p:---- s:0068 b:0068 l:000067 d:000067 FINISH :empty? c:0021 p:---- s:0066 b:0066 l:000065 d:000065 CFUNC :eval c:0020 p:0023 s:0059 b:0059 l:000058 d:000058 METHOD /usr/local/lib/ ruby/1.9.0/irb/workspace.rb:81 c:0019 p:0025 s:0052 b:0051 l:000050 d:000050 METHOD /usr/local/lib/ ruby/1.9.0/irb/context.rb:219 c:0018 p:0024 s:0046 b:0046 l:001084 d:000045 BLOCK /usr/local/lib/ ruby/1.9.0/irb.rb:150 c:0017 p:0024 s:0040 b:0040 l:000039 d:000039 METHOD /usr/local/lib/ ruby/1.9.0/irb.rb:259 c:0016 p:0009 s:0035 b:0035 l:001084 d:000034 BLOCK /usr/local/lib/ ruby/1.9.0/irb.rb:147 c:0015 p:0091 s:0032 b:0032 l:000021 d:000031 BLOCK /usr/local/lib/ ruby/1.9.0/irb/ruby-lex.rb:244 c:0014 p:---- s:0032 b:0032 l:000031 d:000031 FINISH :block_given? c:0013 p:---- s:0030 b:0030 l:000029 d:000029 CFUNC :loop c:0012 p:0007 s:0027 b:0027 l:000021 d:000026 BLOCK /usr/local/lib/ ruby/1.9.0/irb/ruby-lex.rb:231 c:0011 p:---- s:0028 b:0028 l:000027 d:000027 FINISH :each c:0010 p:---- s:0026 b:0026 l:000025 d:000025 CFUNC :catch c:0009 p:0017 s:0022 b:0022 l:000021 d:000021 METHOD /usr/local/lib/ ruby/1.9.0/irb/ruby-lex.rb:230 c:0008 p:0034 s:0019 b:0019 l:001084 d:001084 METHOD /usr/local/lib/ ruby/1.9.0/irb.rb:146 c:0007 p:0009 s:0016 b:0016 l:00090c d:000015 BLOCK /usr/local/lib/ ruby/1.9.0/irb.rb:70 c:0006 p:---- s:0017 b:0017 l:000016 d:000016 FINISH :(null) c:0005 p:---- s:0015 b:0015 l:000014 d:000014 CFUNC :catch c:0004 p:0152 s:0011 b:0011 l:00090c d:00090c METHOD /usr/local/lib/ ruby/1.9.0/irb.rb:69 c:0003 p:0033 s:0006 b:0006 l:000005 d:000005 TOP /usr/local/bin/ irb-trunk:13 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH :inherited c:0001 p:0000 s:0002 b:0002 l:000001 d:000001 TOP : 37644 --------------------------- DBG> : "(irb):3:in `add_method'" DBG> : "(irb):6:in `irb_binding'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/workspace.rb:81:in `eval'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/workspace.rb:81:in `evaluate'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/context.rb:219:in `evaluate'" DBG> : "/usr/local/lib/ruby/1.9.0/irb.rb:150:in `block (2 levels) in eval_input'" DBG> : "/usr/local/lib/ruby/1.9.0/irb.rb:259:in `signal_status'" DBG> : "/usr/local/lib/ruby/1.9.0/irb.rb:147:in `block in eval_input'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/ruby-lex.rb:244:in `block (2 levels) in each_top_level_statement'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/ruby-lex.rb:231:in `loop'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/ruby-lex.rb:231:in `block in each_top_level_statement'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `catch'" DBG> : "/usr/local/lib/ruby/1.9.0/irb/ruby-lex.rb:230:in `each_top_level_statement'" DBG> : "/usr/local/lib/ruby/1.9.0/irb.rb:146:in `eval_input'" DBG> : "/usr/local/lib/ruby/1.9.0/irb.rb:70:in `block in start'" DBG> : "/usr/local/lib/ruby/1.9.0/irb.rb:69:in `catch'" DBG> : "/usr/local/lib/ruby/1.9.0/irb.rb:69:in `start'" DBG> : "/usr/local/bin/irb-trunk:13:in `
'" -- backtrace of native function call (Use addr2line) -- 0xdb406 0x1b6fc 0x1b73b 0x98d7b 0x9007d97b 0xffffffff 0x16cd1 0x593f6 0x61732 0x6fea5 0xdd920 0x594ca 0x596a7 0xcb76f 0xcb867 0x24f8f 0x252d6 0x1fa6d 0x1fbaf 0xce4e5 0xd1890 0xd5724 0xd9a9c 0x2503f 0x253c6 0xce4e5 0xd1890 0xd5724 0xd9a9c 0xd105d 0x1eeea 0x1efa9 0x1f107 0xd1890 0xd5724 0xd9a9c 0xd105d 0x20bb4 0xce4e5 0xd1890 0xd5724 0xd9a9c 0xd105d 0x20bb4 0xce4e5 0xd1890 0xd5724 0xd9a9c 0xd9d69 0x1ebb4 0x2371a 0x229f 0x2206 ------------------------------------------------------- Abort trap