From: Takashi Tamura <redmine@...> Date: 2009-05-10T09:45:03+09:00 Subject: [ruby-dev:38404] [Bug #1453] dl in ruby-1.9 must check whether block is given to TempFunction Bug #1453: dl in ruby-1.9 must check whether block is given to TempFunction http://redmine.ruby-lang.org/issues/show/1453 起票者: Takashi Tamura ステータス: Open, 優先度: Normal カテゴリ: ext, Target version: 1.9.2 ruby -v: ruby 1.9.2dev (2009-05-02 trunk 23326) [i686-linux] 以下のようにブロック付きで呼ぶべきところで呼ばないと落ちます。 $ cat d7.rb require 'dl/import' require 'dl/import' module M extend DL::Importer dlload "libc.so.6" QsortCallbackWithoutBlock = bind("void *qsort_callback(void*, void*)", :temp) extern 'void qsort(void *, int, int, void *)' end buff = "3465721" M.qsort(buff, buff.size, 1, M::QsortCallbackWithoutBlock) # <= ここはブロックつきで呼ばないといけない。 $ ruby-1.9 d7.rb /usr/local/pkg/ruby-1.9/lib/ruby/1.9.1/dl/func.rb:37: [BUG] Segmentation fault ruby 1.9.2dev (2009-05-02 trunk 23326) [i686-linux] ブロックが与えられたかをチェックするパッチです。 Index: lib/dl/value.rb =================================================================== --- lib/dl/value.rb (リビジョン 23328) +++ lib/dl/value.rb (作業コピー) @@ -63,6 +63,8 @@ module DL if( block ) arg.bind_at_call(&block) funcs.push(arg) + elsif arg.is_a?(TempFunction) + raise(RuntimeError, "block must be given.") end return arg.to_i when String ---------------------------------------- http://redmine.ruby-lang.org