From: Akinori MUSHA Date: 2002-02-23T18:50:03+09:00 Subject: [ruby-dev:16043] Re: Digest::MD5 SEGV (ruby_1_6) At Sat, 23 Feb 2002 05:55:30 +0900, m_seki@mva.biglobe.ne.jp wrote: > 1.6のCVS版でDigest::MD5.new(str).hexdigest や digest でSEGVになりました。 > MD5#updateと組み合わせても hexdigest , digest とも SEGVです。 > > なお、同じ文字列をDigest::MD5.hexdigest(str)する場合は大丈夫です。 > > 同じパラメータを渡しても単体で動かすと大丈夫なので > 再現する短いスクリプトがうまく用意できません。(;_;)  ここの、 > #0 0x402e0b4a in MD5_Final () from /lib/libcrypto.so.2 > #1 0x4002259b in MD5_End () at eval.c:41 > #2 0x40025265 in rb_digest_base_hexdigest () at eval.c:41 が原因です。md5.so 内のではなく、 libcrypto.so.2 の MD5_*() を 呼んでしまっている。  単体で大丈夫というのはおそらく、他の拡張ライブラリの *.so が libcrypto.so.2 に(間接的に)リンクされていて、そいつをロードした ことが影響したのかもしれません。対策としては、シンボルがぶつから ないように md5.c を直す、でしょうか。  しかし、 rtld がそういう仕様だとほかでもいろいろぶつかって困る ような気がするんですが、どうなんでしょうね。お使いのシステムは Red Hat Linux 7.2 でしたっけ。  Digest::MD5 の md5.c は OpenSSL と引数順等を互換にしてあるん ですが、上を見るとどうも /lib/libcrypto.so.2 の MD_*() はそれと バイナリ互換性がないみたいです。  ということは、そのシステムで libssl.so と libcrypto.so.2 を 両方リンクして MD_*() を呼び出すプログラムは、同じようにコアを 吐いちゃうんでしょうか? -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Somewhere out of a memory.. of lighted streets on quiet nights.."