From: Martin Bosslet Date: 2011-06-22T17:59:56+09:00 Subject: [ruby-dev:43871] [Ruby 1.9 - Bug #4919] OpenSSL::SSL::Sesssion#time= に Bignum を渡すと ArgumentError が発生する Issue #4919 has been updated by Martin Bosslet. I get the same result for OpenSSL 0.9.8k plus an additional error when running make test-all -TESTS="openssl" on revision 32199. 1) Error: test_connect_and_close(OpenSSL::TestSSL): OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read finished A: sslv3 alert illegal parameter /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/test_ssl.rb:46:in `connect' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/test_ssl.rb:46:in `block in test_connect_and_close' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/utils.rb:280:in `call' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/utils.rb:280:in `start_server' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/test_ssl.rb:35:in `test_connect_and_close' 2) Error: test_session(OpenSSL::TestSSLSession): ArgumentError: unknown type /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/test_ssl_session.rb:21:in `time=' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/test_ssl_session.rb:21:in `block in test_session' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/utils.rb:280:in `call' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/utils.rb:280:in `start_server' /home/martin/Projekte/Ruby/ruby-svn/ruby/test/openssl/test_ssl_session.rb:7:in `test_session' The latter can be solved by Tomoyuki's suggested fix. Two questions: 1) Is it OK if I apply the fix? 2) Anyone else getting the "sslv3 alert illegal parameter"? I get it most of the time but not always... Regards, Martin ---------------------------------------- Bug #4919: OpenSSL::SSL::Sesssion#time= に Bignum を渡すと ArgumentError が発生する http://redmine.ruby-lang.org/issues/4919 Author: Tomoyuki Chikanaga Status: Open Priority: Normal Assignee: Category: ext Target version: 1.9.2 ruby -v: ruby 1.9.3dev (2011-06-22 trunk 32198) [i686-linux] 掲題のような理由で make test-all TESTS="-v openssl/test_ssl_session.rb" を実行すると 1E になります。 1) Error: test_session(OpenSSL::TestSSLSession): ArgumentError: unknown type /opt/ruby-trunk/src/ruby/test/openssl/test_ssl_session.rb:21:in `time=' /opt/ruby-trunk/src/ruby/test/openssl/test_ssl_session.rb:21:in `block in test_session' /opt/ruby-trunk/src/ruby/test/openssl/utils.rb:280:in `call' /opt/ruby-trunk/src/ruby/test/openssl/utils.rb:280:in `start_server' /opt/ruby-trunk/src/ruby/test/openssl/test_ssl_session.rb:7:in `test_session' 32bit 版のため Time.now.to_i が Bignum になり、OpenSSL::SSL::Sesssion#time= がこれをエラーとして弾くようです。 とりあえず以下のように Bignum 受け付けるようにしてみたところテストのErrorは回避されました。 --- a/ext/openssl/ossl_ssl_session.c +++ b/ext/openssl/ossl_ssl_session.c @@ -149,7 +149,7 @@ static VALUE ossl_ssl_session_get_timeout(VALUE self) \ if (rb_obj_is_instance_of(time_v, rb_cTime)) { \ time_v = rb_funcall(time_v, rb_intern("to_i"), 0); \ - } else if (FIXNUM_P(time_v)) { \ + } else if (FIXNUM_P(time_v) || TYPE(time_v) == T_BIGNUM) { \ ; \ } else { \ rb_raise(rb_eArgError, "unknown type"); \ -- http://redmine.ruby-lang.org