sabotage icon indicating copy to clipboard operation
sabotage copied to clipboard

ruby "irb" repl segfaults with libedit readline replacement

Open rofl0r opened this issue 7 years ago • 0 comments

with normal sabotage readline (libedit):

$ irb
irb(main):001:0> "foo"
=> "foo"
irb(main):002:0> puts "xx"
xx
=> nil
irb(main):003:0> Math.sin(0.7)
=> 0.644217687237691
irb(main):004:0> 
/lib/ruby/2.5.0/irb.rb:647: [BUG] Segmentation fault at 0x0000000000000010
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0018 p:---- s:0087 e:000086 CFUNC  :format
c:0017 p:0151 s:0081 e:000080 BLOCK  /lib/ruby/2.5.0/irb.rb:647 [FINISH]
c:0016 p:---- s:0078 e:000077 CFUNC  :gsub!
c:0015 p:0015 s:0073 e:000072 METHOD /lib/ruby/2.5.0/irb.rb:629
c:0014 p:0089 s:0064 e:000062 BLOCK  /lib/ruby/2.5.0/irb.rb:455 [FINISH]
c:0013 p:0023 s:0053 e:000052 METHOD /lib/ruby/2.5.0/irb/ruby-lex.rb:207
c:0012 p:0010 s:0049 e:000048 BLOCK  /lib/ruby/2.5.0/irb/ruby-lex.rb:235 [FINISH]
c:0011 p:---- s:0045 e:000044 CFUNC  :loop
c:0010 p:0006 s:0041 e:000040 BLOCK  /lib/ruby/2.5.0/irb/ruby-lex.rb:232 [FINISH]
c:0009 p:---- s:0038 e:000037 CFUNC  :catch
c:0008 p:0012 s:0033 e:000032 METHOD /lib/ruby/2.5.0/irb/ruby-lex.rb:231
c:0007 p:0029 s:0029 E:001240 METHOD /lib/ruby/2.5.0/irb.rb:487
c:0006 p:0005 s:0025 e:000024 BLOCK  /lib/ruby/2.5.0/irb.rb:428 [FINISH]
c:0005 p:---- s:0022 e:000021 CFUNC  :catch
c:0004 p:0063 s:0017 E:0022c8 METHOD /lib/ruby/2.5.0/irb.rb:427
c:0003 p:0102 s:0012 e:000011 METHOD /lib/ruby/2.5.0/irb.rb:383
c:0002 p:0019 s:0006 e:000005 EVAL   /bin/irb:11 [FINISH]
c:0001 p:0000 s:0003 E:0024e0 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
/bin/irb:11:in `<main>'
/lib/ruby/2.5.0/irb.rb:383:in `start'
/lib/ruby/2.5.0/irb.rb:427:in `run'
/lib/ruby/2.5.0/irb.rb:427:in `catch'
/lib/ruby/2.5.0/irb.rb:428:in `block in run'
/lib/ruby/2.5.0/irb.rb:487:in `eval_input'
/lib/ruby/2.5.0/irb/ruby-lex.rb:231:in `each_top_level_statement'
/lib/ruby/2.5.0/irb/ruby-lex.rb:231:in `catch'
/lib/ruby/2.5.0/irb/ruby-lex.rb:232:in `block in each_top_level_statement'
/lib/ruby/2.5.0/irb/ruby-lex.rb:232:in `loop'
/lib/ruby/2.5.0/irb/ruby-lex.rb:235:in `block (2 levels) in each_top_level_statement'
/lib/ruby/2.5.0/irb/ruby-lex.rb:207:in `prompt'
/lib/ruby/2.5.0/irb.rb:455:in `block in eval_input'
/lib/ruby/2.5.0/irb.rb:629:in `prompt'
/lib/ruby/2.5.0/irb.rb:629:in `gsub!'
/lib/ruby/2.5.0/irb.rb:647:in `block in prompt'
/lib/ruby/2.5.0/irb.rb:647:in `format'

-- Machine register context ------------------------------------------------
 RIP: 0x00007f85d2c847cb RBP: 0x0000000000000004 RSP: 0x00007ffc3fb75558
 RAX: 0x0000000000000000 RBX: 0x0000000001f324d0 RCX: 0x0000000000000004
 RDX: 0x0000000001f5ff30 RDI: 0x0000000001f324d0 RSI: 0x0000000000000020
  R8: 0x0000000000000300  R9: 0x0000000000600540 R10: 0x0000000001f505b8
 R11: 0x0000000001f50568 R12: 0x0000000000000020 R13: 0xfffffffffffffff0
 R14: 0x00007f85d2eea5c8 R15: 0x00007f85d2eea2c0 EFL: 0x0000000000010283

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

* Loaded script: irb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 /lib/ruby/2.5.0/x86_64-linux/enc/encdb.so
    5 /lib/ruby/2.5.0/x86_64-linux/enc/trans/transdb.so
    6 /lib/ruby/2.5.0/x86_64-linux/rbconfig.rb
    7 /lib/ruby/2.5.0/rubygems/compatibility.rb
    8 /lib/ruby/2.5.0/rubygems/defaults.rb
    9 /lib/ruby/2.5.0/rubygems/deprecate.rb
   10 /lib/ruby/2.5.0/rubygems/errors.rb
   11 /lib/ruby/2.5.0/rubygems/version.rb
   12 /lib/ruby/2.5.0/rubygems/requirement.rb
   13 /lib/ruby/2.5.0/rubygems/platform.rb
   14 /lib/ruby/2.5.0/rubygems/basic_specification.rb
   15 /lib/ruby/2.5.0/rubygems/stub_specification.rb
   16 /lib/ruby/2.5.0/rubygems/util/list.rb
   17 /lib/ruby/2.5.0/x86_64-linux/stringio.so
   18 /lib/ruby/2.5.0/rubygems/specification.rb
   19 /lib/ruby/2.5.0/rubygems/exceptions.rb
   20 /lib/ruby/2.5.0/rubygems/dependency.rb
   21 /lib/ruby/2.5.0/rubygems/core_ext/kernel_gem.rb
   22 /lib/ruby/2.5.0/monitor.rb
   23 /lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb
   24 /lib/ruby/2.5.0/rubygems.rb
   25 /lib/ruby/2.5.0/rubygems/path_support.rb
   26 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/version.rb
   27 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/core_ext/name_error.rb
   28 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/levenshtein.rb
   29 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/jaro_winkler.rb
   30 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checker.rb
   31 /lib/ruby/2.5.0/delegate.rb
   32 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   33 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   34 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   35 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
   36 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/key_error_checker.rb
   37 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/null_checker.rb
   38 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/plain_formatter.rb
   39 /lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean.rb
   40 /lib/ruby/2.5.0/e2mmap.rb
   41 /lib/ruby/2.5.0/irb/init.rb
   42 /lib/ruby/2.5.0/irb/workspace.rb
   43 /lib/ruby/2.5.0/irb/inspector.rb
   44 /lib/ruby/2.5.0/irb/output-method.rb
   45 /lib/ruby/2.5.0/irb/context.rb
   46 /lib/ruby/2.5.0/irb/extend-command.rb
   47 /lib/ruby/2.5.0/irb/notifier.rb
   48 /lib/ruby/2.5.0/irb/slex.rb
   49 /lib/ruby/2.5.0/irb/ruby-token.rb
   50 /lib/ruby/2.5.0/irb/ruby-lex.rb
   51 /lib/ruby/2.5.0/irb/src_encoding.rb
   52 /lib/ruby/2.5.0/irb/magic-file.rb
   53 /lib/ruby/2.5.0/x86_64-linux/readline.so
   54 /lib/ruby/2.5.0/irb/input-method.rb
   55 /lib/ruby/2.5.0/irb/locale.rb
   56 /lib/ruby/2.5.0/irb.rb

* Process memory map:

00400000-00401000 r-xp 00000000 08:11 93776877                           /opt/ruby/bin/ruby
00600000-00601000 rw-p 00000000 08:11 93776877                           /opt/ruby/bin/ruby
01afd000-020ab000 rw-p 00000000 00:00 0                                  [heap]
7f85d1bab000-7f85d1dba000 r-xp 00000000 08:11 90136520                   /opt/curses/lib/libterminfo.so
7f85d1dba000-7f85d1dbb000 rw-p 0000f000 08:11 90136520                   /opt/curses/lib/libterminfo.so
7f85d1dbb000-7f85d1dbd000 rw-p 00000000 00:00 0 
7f85d1dbd000-7f85d1fe1000 r-xp 00000000 08:11 90143789                   /opt/libedit/lib/libedit.so.0.0.56
7f85d1fe1000-7f85d1fe3000 rw-p 00024000 08:11 90143789                   /opt/libedit/lib/libedit.so.0.0.56
7f85d1fe3000-7f85d1fe7000 rw-p 00000000 00:00 0 
7f85d1fe7000-7f85d21ed000 r-xp 00000000 08:11 93777588                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/readline.so
7f85d21ed000-7f85d21ee000 rw-p 00006000 08:11 93777588                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/readline.so
7f85d21ee000-7f85d23f4000 r-xp 00000000 08:11 93777578                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/stringio.so
7f85d23f4000-7f85d23f5000 rw-p 00006000 08:11 93777578                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/stringio.so
7f85d23f5000-7f85d25f7000 r-xp 00000000 08:11 93777614                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/enc/trans/transdb.so
7f85d25f7000-7f85d25f8000 rw-p 00002000 08:11 93777614                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/enc/trans/transdb.so
7f85d25f8000-7f85d27f9000 r-xp 00000000 08:11 93777598                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/enc/encdb.so
7f85d27f9000-7f85d27fa000 rw-p 00001000 08:11 93777598                   /opt/ruby/lib/ruby/2.5.0/x86_64-linux/enc/encdb.so
7f85d27fa000-7f85d2c4a000 r-xp 00000000 08:11 93776878                   /opt/ruby/lib/libruby.so.2.5.0
7f85d2c4a000-7f85d2c52000 rw-p 00250000 08:11 93776878                   /opt/ruby/lib/libruby.so.2.5.0
7f85d2c52000-7f85d2c61000 rw-p 00000000 00:00 0 
7f85d2c61000-7f85d2cea000 r-xp 00000000 08:11 90110774                   /opt/musl/lib/libc.so
7f85d2de2000-7f85d2de3000 ---p 00000000 00:00 0 
7f85d2de3000-7f85d2ee9000 rw-p 00000000 00:00 0 
7f85d2ee9000-7f85d2eea000 rw-p 00088000 08:11 90110774                   /opt/musl/lib/libc.so
7f85d2eea000-7f85d2eed000 rw-p 00000000 00:00 0 
7ffc3fb59000-7ffc3fb7a000 rw-p 00000000 00:00 0                          [stack]
7ffc3fb95000-7ffc3fb97000 r--p 00000000 00:00 0                          [vvar]
7ffc3fb97000-7ffc3fb99000 r-xp 00000000 00:00 0                          [vdso]


[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

root:/$ butch rm libedit
libedit: removed.
root:/$ butch rebuild gnu-readline
*** downloadqueue ***
gnu-readline
*** buildqueue ***
gnu-readline
2018-01-27 22:06:13 downloading gnu-readline (/src/build/dl_gnu-readline.sh) -> /src/logs/dl_gnu-readline.log
2018-01-27 22:06:13 building gnu-readline (/src/build/build_gnu-readline.sh) -> /src/logs/build_gnu-readline.log
2018-01-27 22:06:16 done.
got 0 download errors and 0 build errors.
time spent: 00:00:03
root:/$ butch rebuild ruby
package libz is already installed, skipping
package zlib is already installed, skipping
package libressl is already installed, skipping
package gdbm is already installed, skipping
*** downloadqueue ***
ruby
*** buildqueue ***
ruby
2018-01-27 22:06:23 downloading ruby (/src/build/dl_ruby.sh) -> /src/logs/dl_ruby.log
2018-01-27 22:06:23 building ruby (/src/build/build_ruby.sh) -> /src/logs/build_ruby.log
2018-01-27 22:07:00 done.
got 0 download errors and 0 build errors.
time spent: 00:00:37
root:/$ irb
irb(main):001:0> "foo"
=> "foo"
irb(main):002:0> puts "xx"
xx
=> nil
irb(main):003:0> Math.sin(0.7)
=> 0.644217687237691
irb(main):004:0> 
irb(main):005:0> 
irb(main):006:0> 
irb(main):007:0> 
irb(main):008:0> 
irb(main):009:0> 
irb(main):010:0> 
irb(main):011:0> 
irb(main):012:0> 
irb(main):013:0> 
irb(main):014:0> 
irb(main):015:0> 
irb(main):016:0> 
irb(main):017:0> 

it should be investigated what causes the issue, since all other packages in sabotage use libedit, and they probably need all to be recompiled against gnu-readline to work.

rofl0r avatar Jan 27 '18 22:01 rofl0r