Bug #9315

Segfault when calling super in rspec mocks with and_call_original [linux]

Added by jgraichen (Jan Graichen) over 6 years ago. Updated over 6 years ago.

Target version:
ruby -v:
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]


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.


I've attached the segfault output.


ruby.log (42 KB) ruby.log jgraichen (Jan Graichen), 12/28/2013 11:17 PM

Related issues

Is duplicate of Ruby master - Bug #9309: Crash while running testsClosed12/27/2013Actions

Updated by mame (Yusuke Endoh) over 6 years ago

  • Status changed from Open to Assigned
  • Assignee set to nobu (Nobuyoshi Nakada)

Good catch. Here is a smaller example:

module A
  def foo
class B
  include A

I think r44179 caused this issue.

Yusuke Endoh


Updated by nobu (Nobuyoshi Nakada) over 6 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r44455.
Jan, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

vm_insnhelper.c: missing super in method module

  • vm_insnhelper.c (vm_search_super_method): direct superclass of a module is found when super called in a Method object generated a method defined in a module, call method_missing in that case. [ruby-core:59358] [Bug #9315]

Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago


r44175 and r44179 were already backported to ruby_2_0_0 branch at r44345.
But I cannot reproduce SEGV on 2.0.0-head(r44393) with testcase in r44455.
I wonder if I should backport r44458 to ruby_2_0_0. Any idea?

Updated by jgraichen (Jan Graichen) over 6 years ago

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!"

module Validation
  def valid?(context)

  # Hook save!
  def save!(*args)
    return false unless valid? :create

class Model
  include Persistence
  include Validation

On ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-linux]:

> ruby test.rb

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 #<Model:0x00000000dccc88> (NoMethodError)
        from test.rb:25:in `call'
        from test.rb:25:in `<main>'

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 `<main>'
test.rb:25:in `call'
test.rb:16:in `save!'

-- C level backtrace information -------------------------------------------
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25dd8ec] vm_dump.c:685
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e2472d43] error.c:307
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e2473993] error.c:334
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25555ce] signal.c:704
/lib/x86_64-linux-gnu/ [0x7f40e21ef210]
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25c7a03] vm_method.c:573
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25cbe79] vm_insnhelper.c:2029
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25cf93c] vm.c:1304
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25d07f4] vm_eval.c:171
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25d1477] vm_eval.c:50
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e248456a] proc.c:1833
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25d3e41] vm_insnhelper.c:1470
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25cbd54] insns.def:1028
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25cf93c] vm.c:1304
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e25d8986] vm.c:1562
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e2478eea] eval.c:253
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e247ae7d] eval.c:318
/home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ [0x7f40e247d2bc] eval.c:310
ruby() [0x40088b]
/lib/x86_64-linux-gnu/ [0x7f40e171c995]
ruby() [0x4008b9]

-- Other runtime information -----------------------------------------------

* Loaded script: test.rb

* Loaded features:

    1 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/
    2 /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/enc/trans/
    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/
   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/
7f40e0bf9000-7f40e0df9000 ---p 00015000 fe:02 1966585                    /lib/x86_64-linux-gnu/
7f40e0df9000-7f40e0dfa000 rw-p 00015000 fe:02 1966585                    /lib/x86_64-linux-gnu/
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/
7f40e0dfd000-7f40e0ffc000 ---p 00003000 fe:03 17045821                   /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/ruby/2.1.0/x86_64-linux/
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/
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/
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/
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/
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/
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/
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/
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/
7f40e189e000-7f40e1a9d000 ---p 001a3000 fe:02 1966939                    /lib/x86_64-linux-gnu/
7f40e1a9d000-7f40e1aa1000 r--p 001a2000 fe:02 1966939                    /lib/x86_64-linux-gnu/
7f40e1aa1000-7f40e1aa3000 rw-p 001a6000 fe:02 1966939                    /lib/x86_64-linux-gnu/
7f40e1aa3000-7f40e1aa7000 rw-p 00000000 00:00 0 
7f40e1aa7000-7f40e1ba3000 r-xp 00000000 fe:02 1966949                    /lib/x86_64-linux-gnu/
7f40e1ba3000-7f40e1da3000 ---p 000fc000 fe:02 1966949                    /lib/x86_64-linux-gnu/
7f40e1da3000-7f40e1da4000 r--p 000fc000 fe:02 1966949                    /lib/x86_64-linux-gnu/
7f40e1da4000-7f40e1da5000 rw-p 000fd000 fe:02 1966949                    /lib/x86_64-linux-gnu/
7f40e1da5000-7f40e1dad000 r-xp 00000000 fe:02 1966946                    /lib/x86_64-linux-gnu/
7f40e1dad000-7f40e1fac000 ---p 00008000 fe:02 1966946                    /lib/x86_64-linux-gnu/
7f40e1fac000-7f40e1fad000 r--p 00007000 fe:02 1966946                    /lib/x86_64-linux-gnu/
7f40e1fad000-7f40e1fae000 rw-p 00008000 fe:02 1966946                    /lib/x86_64-linux-gnu/
7f40e1fae000-7f40e1fdc000 rw-p 00000000 00:00 0 
7f40e1fdc000-7f40e1fdf000 r-xp 00000000 fe:02 1966937                    /lib/x86_64-linux-gnu/
7f40e1fdf000-7f40e21de000 ---p 00003000 fe:02 1966937                    /lib/x86_64-linux-gnu/
7f40e21de000-7f40e21df000 r--p 00002000 fe:02 1966937                    /lib/x86_64-linux-gnu/
7f40e21df000-7f40e21e0000 rw-p 00003000 fe:02 1966937                    /lib/x86_64-linux-gnu/
7f40e21e0000-7f40e21f7000 r-xp 00000000 fe:02 1966931                    /lib/x86_64-linux-gnu/
7f40e21f7000-7f40e23f6000 ---p 00017000 fe:02 1966931                    /lib/x86_64-linux-gnu/
7f40e23f6000-7f40e23f7000 r--p 00016000 fe:02 1966931                    /lib/x86_64-linux-gnu/
7f40e23f7000-7f40e23f8000 rw-p 00017000 fe:02 1966931                    /lib/x86_64-linux-gnu/
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/
7f40e26a7000-7f40e28a7000 ---p 002ab000 fe:03 17045009                   /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/
7f40e28a7000-7f40e28af000 rw-p 002ab000 fe:03 17045009                   /home/jan/.rvm/rubies/ruby-2.1.0-head/lib/
7f40e28af000-7f40e28d5000 rw-p 00000000 00:00 0 
7f40e28d5000-7f40e28f6000 r-xp 00000000 fe:02 1966711                    /lib/x86_64-linux-gnu/
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/
7f40e2af7000-7f40e2af9000 rw-p 00022000 fe:02 1966711                    /lib/x86_64-linux-gnu/
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]

You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details:


Updated by nobu (Nobuyoshi Nakada) over 6 years ago

Seems working on the trunk.

Updated by jgraichen (Jan Graichen) over 6 years ago

Yes, ruby 2.2.0dev (2014-01-06 trunk 44510) [x86_64-linux] indeed works. Looks somehow I missed the most important head. Sorry.

At least the error on current 2.0.0-head seems interesting, should I open another bug for it?

Updated by nobu (Nobuyoshi Nakada) over 6 years ago

  • Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN to 1.9.3: DONTNEED, 2.0.0: REQUIRED, 2.1.0: REQUIRED

r44458 fixed it.
Now I filled the Backport property, it will be backported.

Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago

  • Backport changed from 1.9.3: DONTNEED, 2.0.0: REQUIRED, 2.1.0: REQUIRED to 1.9.3: DONTNEED, 2.0.0: DONE, 2.1.0: REQUIRED

Jan, thank you for your investigation!

r44455, r44458 and r44510 were backported to ruby_2_0_0 branch at r44511.
Thanks again.


Updated by nobu (Nobuyoshi Nakada) over 6 years ago

  • Is duplicate of Bug #9309: Crash while running tests added

Also available in: Atom PDF