Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

EnumDesktopWindows example crashing in ffi 1.9.25 #649

Closed
leoniv opened this issue Aug 11, 2018 · 3 comments · Fixed by #669
Closed

EnumDesktopWindows example crashing in ffi 1.9.25 #649

leoniv opened this issue Aug 11, 2018 · 3 comments · Fixed by #669

Comments

@leoniv
Copy link

leoniv commented Aug 11, 2018

In the WIndows-10 ffi crashin when i run EnumDesktopWindows from wiki i have got "[BUG] Segmentation fault". ffi - 1.9.25 x86-mingw32, ruby 2.5.1p57 (2018-03-29 revision 63029) [i386-mingw32]. Here is sample code and crash information

Samples here ....

require 'ffi'
module Win
  extend FFI::Library

  ffi_lib 'user32'
  ffi_convention :stdcall

  callback :enum_callback, [ :pointer, :long ], :bool

  attach_function :enum_desktop_windows, :EnumDesktopWindows,
                  [ :pointer, :enum_callback, :long ], :bool

  EnumWindowCallback = Proc.new do |wnd, param|
    puts "EnumWindowCallback called"
    true
  end
end

Win.enum_desktop_windows(nil, Win::EnumWindowCallback, 0)
test.rb:20: [BUG] Segmentation fault
ruby 2.5.1p57 (2018-03-29 revision 63029) [i386-mingw32]

-- Control frame information -----------------------------------------------
c:0003 p:---- s:0013 e:000012 CFUNC  :enum_desktop_windows
c:0002 p:0036 s:0006 e:000005 EVAL   test.rb:20 [FINISH]
c:0001 p:0000 s:0003 E:001780 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
test.rb:20:in `<main>'
test.rb:20:in `enum_desktop_windows'

-- C level backtrace information -------------------------------------------
C:\WINDOWS\SYSTEM32\ntdll.dll(ZwWaitForSingleObject+0xc) [0x76fba22c]
C:\WINDOWS\System32\KERNELBASE.dll(WaitForSingleObject+0x12) [0x74320ae2]
C:\msys64\mingw32\bin\msvcrt-ruby250.dll(rb_print_backtrace+0x40) [0x62a8aa60]
C:\WINDOWS\SYSTEM32\ntdll.dll(RtlCaptureStackContext+0x1e6c9) [0x76fed509]

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

* Loaded script: test.rb

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/enc/encdb.so
    5 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/enc/trans/transdb.so
    6 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/enc/windows_1251.so
    7 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/rbconfig.rb
    8 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/compatibility.rb
    9 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/defaults.rb
   10 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/deprecate.rb
   11 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/errors.rb
   12 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/version.rb
   13 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/requirement.rb
   14 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/platform.rb
   15 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/basic_specification.rb
   16 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/stub_specification.rb
   17 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/util/list.rb
   18 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/stringio.so
   19 C:/msys64/mingw32/lib/ruby/2.5.0/uri/rfc2396_parser.rb
   20 C:/msys64/mingw32/lib/ruby/2.5.0/uri/rfc3986_parser.rb
   21 C:/msys64/mingw32/lib/ruby/2.5.0/uri/common.rb
   22 C:/msys64/mingw32/lib/ruby/2.5.0/uri/generic.rb
   23 C:/msys64/mingw32/lib/ruby/2.5.0/uri/ftp.rb
   24 C:/msys64/mingw32/lib/ruby/2.5.0/uri/http.rb
   25 C:/msys64/mingw32/lib/ruby/2.5.0/uri/https.rb
   26 C:/msys64/mingw32/lib/ruby/2.5.0/uri/ldap.rb
   27 C:/msys64/mingw32/lib/ruby/2.5.0/uri/ldaps.rb
   28 C:/msys64/mingw32/lib/ruby/2.5.0/uri/mailto.rb
   29 C:/msys64/mingw32/lib/ruby/2.5.0/uri.rb
   30 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/specification.rb
   31 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/exceptions.rb
   32 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/dependency.rb
   33 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/core_ext/kernel_gem.rb
   34 C:/msys64/mingw32/lib/ruby/2.5.0/monitor.rb
   35 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb
   36 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems.rb
   37 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/path_support.rb
   38 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/version.rb
   39 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/core_ext/name_error.rb
   40 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/levenshtein.rb
   41 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/jaro_winkler.rb
   42 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checker.rb
   43 C:/msys64/mingw32/lib/ruby/2.5.0/delegate.rb
   44 C:/msys64/mingw32/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
   45 C:/msys64/mingw32/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
   46 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   47 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
   48 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/key_error_checker.rb
   49 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/null_checker.rb
   50 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/plain_formatter.rb
   51 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean.rb
   52 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/version.rb
   53 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/compatibility_guard.rb
   54 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/pathname.so
   55 C:/msys64/mingw32/lib/ruby/2.5.0/pathname.rb
   56 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/constants.rb
   57 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/util.rb
   58 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/user_interaction.rb
   59 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/etc.so
   60 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/config_file.rb
   61 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/rubygems_integration.rb
   62 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/current_ruby.rb
   63 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/shared_helpers.rb
   64 C:/msys64/mingw32/lib/ruby/2.5.0/i386-mingw32/enc/trans/single_byte.so
   65 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/fileutils/lib/fileutils.rb
   66 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendored_fileutils.rb
   67 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/errors.rb
   68 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/environment_preserver.rb
   69 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/plugin/api.rb
   70 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/plugin.rb
   71 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/source/git.rb
   72 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/source/installed.rb
   73 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/source/specific_file.rb
   74 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/source/local.rb
   75 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/source/lock.rb
   76 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/source/vendor.rb
   77 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/source.rb
   78 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/gem_helpers.rb
   79 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/match_platform.rb
   80 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/rubygems_ext.rb
   81 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/build_metadata.rb
   82 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler.rb
   83 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/settings.rb
   84 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/ext/builder.rb
   85 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/feature_flag.rb
   86 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/source.rb
   87 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/source/path.rb
   88 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/source/git.rb
   89 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/source/rubygems.rb
   90 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/lockfile_parser.rb
   91 C:/msys64/mingw32/lib/ruby/2.5.0/set.rb
   92 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/definition.rb
   93 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/dependency.rb
   94 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/ruby_dsl.rb
   95 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/dsl.rb
   96 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/source_list.rb
   97 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/source/metadata.rb
   98 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/lazy_specification.rb
   99 C:/msys64/mingw32/lib/ruby/2.5.0/tsort.rb
  100 C:/msys64/mingw32/lib/ruby/2.5.0/forwardable/impl.rb
  101 C:/msys64/mingw32/lib/ruby/2.5.0/forwardable.rb
  102 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/spec_set.rb
  103 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb
  104 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb
  105 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb
  106 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb
  107 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb
  108 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
  109 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
  110 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
  111 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
  112 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
  113 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
  114 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
  115 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
  116 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb
  117 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/state.rb
  118 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb
  119 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb
  120 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb
  121 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb
  122 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb
  123 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendor/molinillo/lib/molinillo.rb
  124 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/vendored_molinillo.rb
  125 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/resolver/spec_group.rb
  126 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/resolver.rb
  127 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/index.rb
  128 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/gem_version_promoter.rb
  129 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/source/gemspec.rb
  130 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/runtime.rb
  131 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/dep_proxy.rb
  132 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/ui.rb
  133 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/ui/silent.rb
  134 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/ui/rg_proxy.rb
  135 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/remote_specification.rb
  136 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/stub_specification.rb
  137 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/endpoint_specification.rb
  138 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/ruby_version.rb
  139 C:/msys64/mingw32/lib/ruby/2.5.0/rubygems/bundler_version_finder.rb
  140 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/bundler-1.16.3/lib/bundler/setup.rb
  141 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/2.5/ffi_c.so
  142 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/platform.rb
  143 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/types.rb
  144 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/library.rb
  145 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/errno.rb
  146 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/pointer.rb
  147 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/memorypointer.rb
  148 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/struct_layout_builder.rb
  149 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/struct.rb
  150 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/union.rb
  151 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/managedstruct.rb
  152 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/callback.rb
  153 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/io.rb
  154 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/autopointer.rb
  155 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/variadic.rb
  156 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/enum.rb
  157 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi/ffi.rb
  158 C:/msys64/mingw32/lib/ruby/gems/2.5.0/gems/ffi-1.9.25-x86-mingw32/lib/ffi.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

However, when i build ffi from sources on the my laptop all ffi test passed and samples above working fine. I suppose bug is not in the ffi source bug in the ffi gem build.

Error is present in the ffi x86-mingw32 from v1.9.21 up to last v1.9.25 and reproduces in the Rubies:
  • ruby 2.0.0p648 (2015-12-16 revision 53162) [i386-mingw32]
  • ruby 2.3.7p456 (2018-03-28 revision 63024) [i386-mingw32]
  • ruby 2.4.4p296 (2018-03-28 revision 63013) [i386-mingw32]
  • ruby 2.5.1p57 (2018-03-29 revision 63029) [i386-mingw32]

Ruby v2.1 and v2.2 haven't tested.

From v1.9.4 up to 1.9.18, ffi working fine in the same Ruby versions as above, excluded Ruby v2.5. ffi less than v1.9.21 does not compatible with Ruby 2.5.

@leoniv
Copy link
Author

leoniv commented Aug 11, 2018

#302 similar bug

@larskanis
Copy link
Member

Thank you for analysis! I can repro this issue. It also fails with our test suite:

  1) Callback with  stdcall convention
     Failure/Error: expect(res).to be true

       expected true
            got false
     # ./spec/ffi/callback_spec.rb:771:in `block (2 levels) in <top (required)>'

larskanis added a commit to larskanis/libffi that referenced this issue Jan 24, 2019
The stack pointer has been incorrectly restored after a closure call.

The issue came up at ruby-ffi: ffi/ffi#649

Patch by Alexander Mitin.

Fixes libffi#215
@larskanis
Copy link
Member

This issue is fixed in ffi-1.11.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants