From: "jgraichen (Jan Graichen)" Date: 2014-01-06T20:04:50+09:00 Subject: [ruby-core:59589] [ruby-trunk - Bug #9315] Segfault when calling super in rspec mocks with and_call_original [linux] Issue #9315 has been updated by jgraichen (Jan Graichen). =begin I've finally had time to test my test suite on current ruby heads and encountered some other similar problems again. Given the following example: module Persistence def save! # save to disk etc. puts "saved!" end end module Validation def valid?(context) true end # Hook save! def save!(*args) return false unless valid? :create super end end class Model include Persistence include Validation end Model.new.method(:save!).call On (({ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]})): > ruby test.rb saved! On (({ruby 2.0.0p377 (2014-01-03 revision 44491) [x86_64-linux]})): > ruby test.rb test.rb:16:in `save!': super: no superclass method `save!' for # (NoMethodError) from test.rb:25:in `call' from test.rb:25:in `
' And on (({ruby 2.1.1p2 (2013-12-31 revision 44467) [x86_64-linux]})): > ruby test.rb test.rb:16: [BUG] Segmentation fault at 0x00000000000018 ruby 2.1.1p2 (2013-12-31 revision 44467) [x86_64-linux] -- Control frame information ----------------------------------------------- c:0004 p:0026 s:0012 e:000010 METHOD test.rb:16 [FINISH] c:0003 p:---- s:0007 e:000006 CFUNC :call c:0002 p:0047 s:0004 E:001ca8 EVAL test.rb:25 [FINISH] c:0001 p:0000 s:0002 E:001978 TOP [FINISH] -- Ruby level backtrace information ---------------------------------------- test.rb:25:in `
' test.rb:25:in `call' test.rb:16:in `save!' -- C level backtrace information ------------------------------------------- /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1e18ec) [0x7f40e25dd8ec] vm_dump.c:685 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x76d43) [0x7f40e2472d43] error.c:307 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(rb_bug+0xb3) [0x7f40e2473993] error.c:334 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1595ce) [0x7f40e25555ce] signal.c:704 /lib/x86_64-linux-gnu/libpthread.so.0(+0xf210) [0x7f40e21ef210] /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1cba03) [0x7f40e25c7a03] vm_method.c:573 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1cfe79) [0x7f40e25cbe79] vm_insnhelper.c:2029 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1d393c) [0x7f40e25cf93c] vm.c:1304 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1d47f4) [0x7f40e25d07f4] vm_eval.c:171 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1d5477) [0x7f40e25d1477] vm_eval.c:50 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(rb_method_call_with_block+0x10a) [0x7f40e248456a] proc.c:1833 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1d7e41) [0x7f40e25d3e41] vm_insnhelper.c:1470 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1cfd54) [0x7f40e25cbd54] insns.def:1028 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x1d393c) [0x7f40e25cf93c] vm.c:1304 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(rb_iseq_eval_main+0x1f6) [0x7f40e25d8986] vm.c:1562 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(+0x7ceea) [0x7f40e2478eea] eval.c:253 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(ruby_exec_node+0x1d) [0x7f40e247ae7d] eval.c:318 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1(ruby_run_node+0x1c) [0x7f40e247d2bc] eval.c:310 ruby() [0x40088b] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7f40e171c995] ruby() [0x4008b9] -- Other runtime information ----------------------------------------------- * Loaded script: test.rb * Loaded features: 0 enumerator.so 1 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/encdb.so 2 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/trans/transdb.so 3 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/rbconfig.rb 4 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/compatibility.rb 5 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/defaults.rb 6 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/deprecate.rb 7 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/errors.rb 8 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/version.rb 9 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/requirement.rb 10 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/platform.rb 11 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/basic_specification.rb 12 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/stub_specification.rb 13 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/util/stringio.rb 14 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/specification.rb 15 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/exceptions.rb 16 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_gem.rb 17 thread.rb 18 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/thread.so 19 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/monitor.rb 20 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb 21 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/site_ruby/2.1.0/rubygems.rb * Process memory map: 00400000-00401000 r-xp 00000000 fe:03 17045008 /home/jan/.rvm/rubies/ruby-2.1.0-head/bin/ruby 00600000-00601000 rw-p 00000000 fe:03 17045008 /home/jan/.rvm/rubies/ruby-2.1.0-head/bin/ruby 019d1000-01e6a000 rw-p 00000000 00:00 0 [heap] 7f40e0be4000-7f40e0bf9000 r-xp 00000000 fe:02 1966585 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f40e0bf9000-7f40e0df9000 ---p 00015000 fe:02 1966585 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f40e0df9000-7f40e0dfa000 rw-p 00015000 fe:02 1966585 /lib/x86_64-linux-gnu/libgcc_s.so.1 7f40e0dfa000-7f40e0dfd000 r-xp 00000000 fe:03 17045821 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/thread.so 7f40e0dfd000-7f40e0ffc000 ---p 00003000 fe:03 17045821 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/thread.so 7f40e0ffc000-7f40e0ffd000 rw-p 00002000 fe:03 17045821 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/thread.so 7f40e0ffd000-7f40e0fff000 r-xp 00000000 fe:03 17045808 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/trans/transdb.so 7f40e0fff000-7f40e11ff000 ---p 00002000 fe:03 17045808 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/trans/transdb.so 7f40e11ff000-7f40e1200000 rw-p 00002000 fe:03 17045808 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/trans/transdb.so 7f40e1200000-7f40e1202000 r-xp 00000000 fe:03 17045760 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/encdb.so 7f40e1202000-7f40e1401000 ---p 00002000 fe:03 17045760 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/encdb.so 7f40e1401000-7f40e1402000 rw-p 00001000 fe:03 17045760 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/encdb.so 7f40e1402000-7f40e16fb000 r--p 00000000 fe:02 551553 /usr/lib/locale/locale-archive 7f40e16fb000-7f40e189e000 r-xp 00000000 fe:02 1966939 /lib/x86_64-linux-gnu/libc-2.17.so 7f40e189e000-7f40e1a9d000 ---p 001a3000 fe:02 1966939 /lib/x86_64-linux-gnu/libc-2.17.so 7f40e1a9d000-7f40e1aa1000 r--p 001a2000 fe:02 1966939 /lib/x86_64-linux-gnu/libc-2.17.so 7f40e1aa1000-7f40e1aa3000 rw-p 001a6000 fe:02 1966939 /lib/x86_64-linux-gnu/libc-2.17.so 7f40e1aa3000-7f40e1aa7000 rw-p 00000000 00:00 0 7f40e1aa7000-7f40e1ba3000 r-xp 00000000 fe:02 1966949 /lib/x86_64-linux-gnu/libm-2.17.so 7f40e1ba3000-7f40e1da3000 ---p 000fc000 fe:02 1966949 /lib/x86_64-linux-gnu/libm-2.17.so 7f40e1da3000-7f40e1da4000 r--p 000fc000 fe:02 1966949 /lib/x86_64-linux-gnu/libm-2.17.so 7f40e1da4000-7f40e1da5000 rw-p 000fd000 fe:02 1966949 /lib/x86_64-linux-gnu/libm-2.17.so 7f40e1da5000-7f40e1dad000 r-xp 00000000 fe:02 1966946 /lib/x86_64-linux-gnu/libcrypt-2.17.so 7f40e1dad000-7f40e1fac000 ---p 00008000 fe:02 1966946 /lib/x86_64-linux-gnu/libcrypt-2.17.so 7f40e1fac000-7f40e1fad000 r--p 00007000 fe:02 1966946 /lib/x86_64-linux-gnu/libcrypt-2.17.so 7f40e1fad000-7f40e1fae000 rw-p 00008000 fe:02 1966946 /lib/x86_64-linux-gnu/libcrypt-2.17.so 7f40e1fae000-7f40e1fdc000 rw-p 00000000 00:00 0 7f40e1fdc000-7f40e1fdf000 r-xp 00000000 fe:02 1966937 /lib/x86_64-linux-gnu/libdl-2.17.so 7f40e1fdf000-7f40e21de000 ---p 00003000 fe:02 1966937 /lib/x86_64-linux-gnu/libdl-2.17.so 7f40e21de000-7f40e21df000 r--p 00002000 fe:02 1966937 /lib/x86_64-linux-gnu/libdl-2.17.so 7f40e21df000-7f40e21e0000 rw-p 00003000 fe:02 1966937 /lib/x86_64-linux-gnu/libdl-2.17.so 7f40e21e0000-7f40e21f7000 r-xp 00000000 fe:02 1966931 /lib/x86_64-linux-gnu/libpthread-2.17.so 7f40e21f7000-7f40e23f6000 ---p 00017000 fe:02 1966931 /lib/x86_64-linux-gnu/libpthread-2.17.so 7f40e23f6000-7f40e23f7000 r--p 00016000 fe:02 1966931 /lib/x86_64-linux-gnu/libpthread-2.17.so 7f40e23f7000-7f40e23f8000 rw-p 00017000 fe:02 1966931 /lib/x86_64-linux-gnu/libpthread-2.17.so 7f40e23f8000-7f40e23fc000 rw-p 00000000 00:00 0 7f40e23fc000-7f40e26a7000 r-xp 00000000 fe:03 17045009 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1.0 7f40e26a7000-7f40e28a7000 ---p 002ab000 fe:03 17045009 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1.0 7f40e28a7000-7f40e28af000 rw-p 002ab000 fe:03 17045009 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/libruby.so.2.1.0 7f40e28af000-7f40e28d5000 rw-p 00000000 00:00 0 7f40e28d5000-7f40e28f6000 r-xp 00000000 fe:02 1966711 /lib/x86_64-linux-gnu/ld-2.17.so 7f40e29c2000-7f40e2ac8000 rw-p 00000000 00:00 0 7f40e2aef000-7f40e2af0000 rw-p 00000000 00:00 0 7f40e2af0000-7f40e2af1000 ---p 00000000 00:00 0 7f40e2af1000-7f40e2af6000 rw-p 00000000 00:00 0 [stack:26115] 7f40e2af6000-7f40e2af7000 r--p 00021000 fe:02 1966711 /lib/x86_64-linux-gnu/ld-2.17.so 7f40e2af7000-7f40e2af9000 rw-p 00022000 fe:02 1966711 /lib/x86_64-linux-gnu/ld-2.17.so 7fffd4700000-7fffd4721000 rw-p 00000000 00:00 0 7fffd47fe000-7fffd4800000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] [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 Aborted =end ---------------------------------------- Bug #9315: Segfault when calling super in rspec mocks with and_call_original [linux] https://bugs.ruby-lang.org/issues/9315#change-44120 Author: jgraichen (Jan Graichen) Status: Closed Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: Target version: ruby -v: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN I've tried running my test suite [1] on Ruby 2.1 resulting in segmentation faults. I've created a smaller rspec test [2] reproducing the segfault. I still haven't found a way to reproduce the segfault without rspec mocks. Run the example via `rspec test.rb`. Same script on Ruby 2.0 works. Used linux is a Debian Sid. [1] https://travis-ci.org/jgraichen/acfs/jobs/16069122#L87 [2] https://gist.github.com/jgraichen/8159849 I've attached the segfault output. -- http://bugs.ruby-lang.org/