Bug #3302
closedsegfault in 1.8.6 p398 in Ruby::DL
Description
=begin
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
=end