Project

General

Profile

Bug #13327

Updated by petems (Peter Souter) over 7 years ago

Issue: Segfault on OSX when using ffi-aspell set method 

 Reproducable test case: 

 ~~~ ruby 
 require 'ffi/aspell';speller = ::FFI::Aspell::Speller.new('en_US');speller.set('mode', 'html');puts speller.correct?('foo'); 
 ~~~ 

 Expected behaviour: 

 ~~~ 
 $ ruby -e "require 'ffi/aspell';speller = ::FFI::Aspell::Speller.new('en_US');speller.set('mode', 'html');puts speller.correct?('foo');" 
 true 
 ~~~ 

 Actual behaviour: 

 
 ~~~  
 $ ruby -e "require 'ffi/aspell';speller = ::FFI::Aspell::Speller.new('en_US');speller.set('mode', 'html');puts speller.correct?('foo'); 
 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/speller.rb:219: [BUG] Segmentation fault at 0x0000000000d631 
 ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15] 

 -- Crash Report log information -------------------------------------------- 
    See Crash Report log file under the one of following: 
      * ~/Library/Logs/CrashReporter 
      * /Library/Logs/CrashReporter 
      * ~/Library/Logs/DiagnosticReports 
      * /Library/Logs/DiagnosticReports 
    for more details. 
 Don't forget to include the above Crash Report log file in bug reports. 

 -- Control frame information ----------------------------------------------- 
 c:0004 p:---- s:0017 e:000016 CFUNC    :speller_check 
 c:0003 p:0080 s:0011 e:000010 METHOD /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/speller.rb:219 
 c:0002 p:0048 s:0006 E:001e08 EVAL     -e:1 [FINISH] 
 c:0001 p:0000 s:0002 E:000b90 (none) [FINISH] 

 -- Ruby level backtrace information ---------------------------------------- 
 -e:1:in `<main>' 
 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/speller.rb:219:in `correct?' 
 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/speller.rb:219:in `speller_check' 

 -- Machine register context ------------------------------------------------ 
  rax: 0x00007fa6e383ca98 rbx: 0x00007fa6e298cf10 rcx: 0x00007fa6e298cf30 
  rdx: 0x0000000000000003 rdi: 0x000000000000d5c1 rsi: 0x00007fa6e18842d8 
  rbp: 0x00007fff51eaea90 rsp: 0x00007fff51eaea90    r8: 0x00007fa600040001 
   r9: 0x000000010dfe8000 r10: 0x00007fff51eaea30 r11: 0x000000010e392395 
  r12: 0x0000000000000001 r13: 0x0000000000000003 r14: 0x00007fa6e298cf30 
  r15: 0x0000000000000000 rip: 0x000000010e3711d0 rfl: 0x0000000000010206 

 -- C level backtrace information ------------------------------------------- 
 0     ruby                                  0x000000010def8da4 rb_vm_bugreport + 388 
 1     ruby                                  0x000000010dd94b8a rb_bug_context + 490 
 2     ruby                                  0x000000010de69384 sigsegv + 68 
 3     libsystem_platform.dylib              0x00007fff9a58a52a _sigtramp + 26 
 4     libaspell.dylib                       0x000000010e3711d0 _ZN7acommon7Convert7convertEPKciRNS_6StringE + 4 
 5     libaspell.dylib                       0x000000010e3923bf aspell_speller_check + 42 
 6     libffi.dylib                          0x00007fff9b6c5f14 ffi_call_unix64 + 76 
 7     libffi.dylib                          0x00007fff9b6c679b ffi_call + 923 
 8     ffi_c.bundle                          0x000000010e335d55 rbffi_CallFunction + 229 
 9     ffi_c.bundle                          0x000000010e339889 custom_trampoline + 25 
 10    ruby                                  0x000000010deeefea vm_call_cfunc + 314 
 11    ruby                                  0x000000010ded97bf vm_exec_core + 10175 
 12    ruby                                  0x000000010dee982a vm_exec + 122 
 13    ruby                                  0x000000010dd9d6a8 ruby_exec_internal + 152 
 14    ruby                                  0x000000010dd9d5b6 ruby_run_node + 54 
 15    ruby                                  0x000000010dd50b5f main + 79 

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

 * Loaded script: -e 

 * Loaded features: 

     0 enumerator.so 
     1 thread.rb 
     2 rational.so 
     3 complex.so 
     4 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/x86_64-darwin15/enc/encdb.bundle 
     5 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/x86_64-darwin15/enc/trans/transdb.bundle 
     6 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/unicode_normalize.rb 
     7 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/x86_64-darwin15/rbconfig.rb 
     8 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/compatibility.rb 
     9 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/defaults.rb 
    10 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/deprecate.rb 
    11 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/errors.rb 
    12 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/version.rb 
    13 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/requirement.rb 
    14 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/platform.rb 
    15 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/basic_specification.rb 
    16 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/stub_specification.rb 
    17 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/util/list.rb 
    18 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/x86_64-darwin15/stringio.bundle 
    19 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/specification.rb 
    20 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/exceptions.rb 
    21 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/dependency.rb 
    22 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_gem.rb 
    23 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/monitor.rb 
    24 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb 
    25 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems.rb 
    26 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/path_support.rb 
    27 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/version.rb 
    28 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/core_ext/name_error.rb 
    29 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/levenshtein.rb 
    30 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/jaro_winkler.rb 
    31 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkable.rb 
    32 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/2.3.0/delegate.rb 
    33 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb 
    34 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb 
    35 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb 
    36 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/method_name_checker.rb 
    37 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/null_checker.rb 
    38 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean/formatter.rb 
    39 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/did_you_mean-1.0.0/lib/did_you_mean.rb 
    40 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi_c.bundle 
    41 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/platform.rb 
    42 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/types.rb 
    43 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/library.rb 
    44 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/errno.rb 
    45 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/pointer.rb 
    46 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/memorypointer.rb 
    47 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/struct_layout_builder.rb 
    48 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/struct.rb 
    49 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/union.rb 
    50 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/managedstruct.rb 
    51 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/callback.rb 
    52 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/io.rb 
    53 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/autopointer.rb 
    54 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/variadic.rb 
    55 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/enum.rb 
    56 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi/ffi.rb 
    57 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-1.9.18/lib/ffi.rb 
    58 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/aspell.rb 
    59 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/error.rb 
    60 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/speller.rb 
    61 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell/version.rb 
    62 /Users/petersouter/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/ffi-aspell-1.1.0/lib/ffi/aspell.rb 

 [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 

 Abort trap: 6 
 ~~~ 

 Setting the mode is the reason it segfaults. Without the mode it's fine:  
 ~~~ 
 $ ruby -e "require 'ffi/aspell';speller = ::FFI::Aspell::Speller.new('en_US');puts speller.correct?('foo');" 
 true 
 ~~~ 

 I've attached the crash log. 

 This appears to affect all rubies. Tried with rbenv:  

 * system 
 * 2.1.10 
 * 2.2.5 
 * 2.3.3 
 * 2.4.0 

 This appears to only affect OSX., I tried on an Ubuntu 16.04 machine and it worked fine: 

 ~~~ 
 $ uname -a  
 Linux ubuntu-test 4.4.0-64-generic #85-Ubuntu SMP Mon Feb 20 11:50:30 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 
 $ ruby --version 
 ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu] 
 $ ruby -e "require 'ffi/aspell';speller = ::FFI::Aspell::Speller.new('en_US');speller.set('mode', 'html');puts speller.correct?('foo');" 
 true 
 ~~~

Back