Backport #3302: segfault in 1.8.6 p398 in Ruby::DL
http://redmine.ruby-lang.org/issues/show/3302

Author: Jarmo Pertman
Status: Open, Priority: Normal

I tried to call a simple method on Windows (XP 32bit, Win7 64bit - didn't matter)
machine and it seems that i will get a segmentation fault depending of
the Ruby version.

Here is the offending code (doc for EnumWindows is at
http://msdn.microsoft.com/en-us/library/ms633497(v=VS.85).aspx):

require 'dl/import'

module Testing

  extend DL::Importable

  dlload "user32.dll"

  USER32 = DL.dlopen("user32")
  EnumWindows = USER32['EnumWindows', 'IPL']

  CALLBACK = DL.callback('ILL') do |curr_hwnd, p|
    p curr_hwnd
    0
  end

  module_function

  def enumerate
    EnumWindows.call(CALLBACK, 0)
  end
end

Testing.enumerate

-------------------

And when trying to run it with different Ruby 1.8.6 patchlevels, i see
the following output:

S:\>ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

S:\>testing.rb
328312

S:\>ruby -v
ruby 1.8.6 (2010-02-04 patchlevel 398) [i386-mingw32]

S:\>testing.rb
393884
S:/testing.rb:20: [BUG] Segmentation fault
ruby 1.8.6 (2010-02-04) [i386-mingw32]


This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.

-------

So, p398 gives me a segfault. On the other hand FFI example at
http://wiki.github.com/ffi/ffi/windows-examples works perfectly. Also using Win32::API works.

Jarmo


----------------------------------------
http://redmine.ruby-lang.org