[#48591] StringValuePtrでnull終止されてない文字列の作り方 — madoka yamamoto <yamamotomadoka@...>
山本ともうします。
5 messages
2014/10/05
[#48598] Re: StringValuePtrでnull終止されてない文字列の作り方
— "NARUSE, Yui" <naruse@...>
2014/10/06
まず、CRubyとしてはStringValuePtrがNUL終端する保証はしていませんから、仮にnull-terminateしてないことにより問題が起きるならば、
[#48666] Re: [ruby-cvs:55171] duerst:r48021 (trunk): common.mk: Added a rule to generate lib/unicode_normalize/tables.rb. — "Martin J. Dürst" <duerst@...>
中田さん、こんにちは。
3 messages
2014/10/19
[ruby-dev:48629] [ruby-trunk - Bug #10384] [Open] Fiddle::DLError: unknown symbol "Init_objspace" during Fiddle::TestHandle#test_NEXT and Fiddle::TestHandle#test_static_sym on Solaris
From:
ngotogenome@...
Date:
2014-10-14 13:14:55 UTC
List:
ruby-dev #48629
Issue #10384 has been reported by Naohisa Goto.
----------------------------------------
Bug #10384: Fiddle::DLError: unknown symbol "Init_objspace" during Fiddle::TestHandle#test_NEXT and Fiddle::TestHandle#test_static_sym on Solaris
https://bugs.ruby-lang.org/issues/10384
* Author: Naohisa Goto
* Status: Open
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: ruby 2.2.0dev (2014-10-14) [sparc64-solaris2.10]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Solarisにて、make test-all中に以下のエラーが発生することが多くなっています。
(出ないこともたまにあります。)
~~~
2) Error:
DL::TestHandle#test_static_sym:
DL::DLError: unknown symbol "Init_objspace"
/XXXXX/test/dl/test_handle.rb:34:in `sym'
/XXXXX/test/dl/test_handle.rb:34:in `rescue in test_static_sym'
/XXXXX/test/dl/test_handle.rb:27:in `test_static_sym'
4) Error:
Fiddle::TestHandle#test_NEXT:
Fiddle::DLError: unknown symbol "Init_objspace"
/XXXXX/test/fiddle/test_handle.rb:171:in `[]'
/XXXXX/test/fiddle/test_handle.rb:171:in `rescue in test_NEXT'
/XXXXX/test/fiddle/test_handle.rb:144:in `test_NEXT'
5) Error:
Fiddle::TestHandle#test_static_sym:
Fiddle::DLError: unknown symbol "Init_objspace"
/XXXXX/test/fiddle/test_handle.rb:41:in `sym'
/XXXXX/test/fiddle/test_handle.rb:41:in `rescue in test_static_sym'
/XXXXX/test/fiddle/test_handle.rb:34:in `test_static_sym'
~~~
Fiddle::Handle.sym および Fiddle::Handle.[] (DL::Handle.sym なども同様)は内部で RTLD_NEXT を使用しています。
Solarisのman dlsym(3C) より引用します。
http://docs.oracle.com/cd/E23823_01/html/816-5168/dlsym-3c.html
~~~
RTLD_NEXT Instructs dlsym() to search for the named
symbol in the objects that were loaded fol-
lowing the object from which the dlsym()
call is being made.
~~~
Solarisのdlsymでは、handleに RTLD_NEXT を指定した場合は、そのコードが読み込まれた後に読み込んだシンボルしか検索しません。
このため、require "objspace" による objspace.so の読み込みが require "fiddle" より前に発生していた場合はエラーになります。
(requireの順番によりエラーが出る・出ないの再現コード)
~~~
% ruby -e 'require "objspace"; require "fiddle"; p Fiddle::Handle.sym("Init_objspace")'
-e:1:in `sym': unknown symbol "Init_objspace" (Fiddle::DLError)
from -e:1:in `<main>'
% ruby -e 'require "fiddle"; require "objspace"; p Fiddle::Handle.sym("Init_objspace")'
9223372034655938496
~~~
単純にgrepすると、require "objspace" は以下で行われています。
test/dl/test_handle.rb: require 'objspace'
test/fiddle/test_closure.rb: require 'objspace'
test/fiddle/test_handle.rb: require 'objspace'
test/lib/profile_test_all.rb:require 'objspace'
test/objspace/test_objspace.rb:require "objspace"
test/ruby/test_file_exhaustive.rb: require "objspace"
これらのテストの実行順番に依存して(ファイルシステムのディレクトリエントリの順番の偶然などのタイミングによって?)、エラーが出たり出なかったりするようです。
--
https://bugs.ruby-lang.org/