Project

General

Profile

Actions

Bug #9315

closed

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

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

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

Description

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.


Files

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

Related issues 1 (0 open1 closed)

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

Updated by mame (Yusuke Endoh) over 10 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
    super
  end
end
class B
  include A
end
B.new.method(:foo).call

I think r44179 caused this issue.

--
Yusuke Endoh

Actions #2

Updated by nobu (Nobuyoshi Nakada) over 10 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 10 years ago

Hello,

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 10 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!"
  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 #<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/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

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

Seems working on the trunk.

Updated by jgraichen (Jan Graichen) over 10 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 10 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 10 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

Hello,
Jan, thank you for your investigation!

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

Actions #9

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

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

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0