Actions
Bug #4416
closedOpenSSL::SSL::Session#session_new_cb
Description
=begin
SSL_CTX_sess_set_new_cb で渡すコールバックの返り値は、
「0 を返すと新しく作られた SSL_SESSION のリファレンスカウンタの
値を減らし(て SSL_SESSION を解放し)、
それ以外を返すとリファレンスカウンタを減らさない」となっています。
しかし、ext/openssl/ossl_ssl.c:ossl_sslctx_session_new_cb ではその中で
リファレンスカウンタの値を増やしているにもかかわらず1を返す場合があります。
ここは常に0を返すべきではないでしょうか?
=end
Updated by naruse (Yui NARUSE) over 13 years ago
- Status changed from Open to Assigned
- Assignee set to nahi (Hiroshi Nakamura)
=begin
=end
Updated by nahi (Hiroshi Nakamura) over 13 years ago
この参照追加はRubyオブジェクトからの参照で、Rubyオブジェクトの開放時にSSL_SESSION_freeを呼ぶために必要なんですが、逆に0(Rubyレベルでfalse)を返したときのOpenSSLの挙動がよくわかりませんね。。。うーむ。
Updated by nahi (Hiroshi Nakamura) over 13 years ago
- Status changed from Assigned to Closed
- Target version changed from 1.9.2 to 1.9.3
r32204で、ご提案いただいたとおりの修正を入れました。Rubyオブジェクトからの参照があり、OpenSSLに何を返しても、session_new_cbに渡されたセッションはクリアされないのですから、0や1を返し分けても無意味、なので、OpenSSL側での整合性を取るために、常に0を返して参照数を適切に調整すべき、ということですね。やっと理解しました。ありがとうございました。
結果として、session_new_cbのコールバックについて、「返す値に意味はない」という変更になりましたが、もとよりバグですので、修正として扱おうと思います。ドキュメントに影響が出てしまい恐縮です。
Actions
Like0
Like0Like0Like0