Bug #12292 » 0001-ext-openssl-check-that-the-SSL-object-is-still-set-a.patch
| ext/openssl/ossl_ssl.c | ||
|---|---|---|
|
ossl_ssl_data_get_struct(self, ssl);
|
||
|
GetOpenFile(ossl_ssl_get_io(self), fptr);
|
||
|
for(;;){
|
||
|
for (;;) {
|
||
|
if (RTYPEDDATA_DATA(self) != ssl)
|
||
|
ossl_raise(eSSLError, "connection is shut down");
|
||
|
ret = func(ssl);
|
||
|
cb_state = rb_ivar_get(self, ID_callback_state);
|
||
| ... | ... | |
|
if (ssl) {
|
||
|
if(!nonblock && SSL_pending(ssl) <= 0)
|
||
|
rb_thread_wait_fd(FPTR_TO_FD(fptr));
|
||
|
for (;;){
|
||
|
for (;;) {
|
||
|
if (RTYPEDDATA_DATA(self) != ssl)
|
||
|
ossl_raise(eSSLError, "connection is shut down");
|
||
|
nread = SSL_read(ssl, RSTRING_PTR(str), RSTRING_LENINT(str));
|
||
|
switch(ssl_get_error(ssl, nread)){
|
||
|
case SSL_ERROR_NONE:
|
||
| ... | ... | |
|
GetOpenFile(ossl_ssl_get_io(self), fptr);
|
||
|
if (ssl) {
|
||
|
for (;;){
|
||
|
for (;;) {
|
||
|
if (RTYPEDDATA_DATA(self) != ssl)
|
||
|
ossl_raise(eSSLError, "connection is shut down");
|
||
|
nwrite = SSL_write(ssl, RSTRING_PTR(str), RSTRING_LENINT(str));
|
||
|
switch(ssl_get_error(ssl, nwrite)){
|
||
|
case SSL_ERROR_NONE:
|
||
| test/openssl/test_ssl.rb | ||
|---|---|---|
|
}
|
||
|
end
|
||
|
def test_close_and_socket_close_while_connecting
|
||
|
# test it doesn't cause a segmentation fault
|
||
|
ctx = OpenSSL::SSL::SSLContext.new
|
||
|
ctx.ciphers = "aNULL"
|
||
|
sock1, sock2 = socketpair
|
||
|
ssl1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx)
|
||
|
ssl2 = OpenSSL::SSL::SSLSocket.new(sock2, ctx)
|
||
|
t = Thread.new { ssl1.connect }
|
||
|
ssl2.accept
|
||
|
ssl1.close
|
||
|
sock1.close
|
||
|
t.value rescue nil
|
||
|
ensure
|
||
|
ssl1.close if ssl1
|
||
|
ssl2.close if ssl2
|
||
|
sock1.close if sock1
|
||
|
sock2.close if sock2
|
||
|
end
|
||
|
def test_get_ephemeral_key
|
||
|
return unless OpenSSL::SSL::SSLSocket.method_defined?(:tmp_key)
|
||
|
pkey = OpenSSL::PKey
|
||