* ext/openssl/ossl_ssl.c (ossl_ssl_shutdown): Avoid randomly generated

SSLError from SSLSocket just after invoking SSLSocket#close. 
  OpenSSL's SSL_shutdown could try to send alert packet and it might 
  set SSLerr(global error stack) as the result. It causes the next
  SSL read/write operation to fail by unrelated reason.

  By design, we're ignoring any error at SSL_shutdown() so we clear 
  global error stack after SSL_shutdown is called. See #5039.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nahi 2011-07-25 04:30:02 +00:00
Родитель 29f354df63
Коммит 6c8a2fe247
2 изменённых файлов: 13 добавлений и 1 удалений

Просмотреть файл

@ -1,3 +1,14 @@
Mon Jul 25 13:09:42 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
* ext/openssl/ossl_ssl.c (ossl_ssl_shutdown): Avoid randomly generated
SSLError from SSLSocket just after invoking SSLSocket#close.
OpenSSL's SSL_shutdown could try to send alert packet and it might
set SSLerr(global error stack) as the result. It causes the next
SSL read/write operation to fail by unrelated reason.
By design, we're ignoring any error at SSL_shutdown() so we clear
global error stack after SSL_shutdown is called. See #5039.
Sun Jul 24 20:29:53 2011 Tanaka Akira <akr@fsij.org> Sun Jul 24 20:29:53 2011 Tanaka Akira <akr@fsij.org>
* ext/socket/extconf.rb: refine the recvmsg test. * ext/socket/extconf.rb: refine the recvmsg test.

Просмотреть файл

@ -983,7 +983,8 @@ ossl_ssl_shutdown(SSL *ssl)
if (rc = SSL_shutdown(ssl)) if (rc = SSL_shutdown(ssl))
break; break;
} }
SSL_clear(ssl); ERR_clear_error();
SSL_clear(ssl);
} }
} }