зеркало из https://github.com/github/ruby.git
ext/openssl/ossl_ssl.c: raise if kwargs given in blocking mode
OpenSSL::SSL::SSLSocket#sysread does not accept kwargs in blocking mode, inform users if they make an error. * ext/openssl/ossl_ssl.c (ossl_ssl_read_internal): do not process kwargs in blocking mode * test/openssl/test_ssl.rb: test sysread git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51016 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
220f9d5053
Коммит
3d7473e179
|
@ -1,3 +1,9 @@
|
|||
Thu Jun 25 02:40:33 2015 Eric Wong <e@80x24.org>
|
||||
|
||||
* ext/openssl/ossl_ssl.c (ossl_ssl_read_internal):
|
||||
do not process kwargs in blocking mode
|
||||
* test/openssl/test_ssl.rb: test sysread
|
||||
|
||||
Wed Jun 24 16:54:11 2015 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* gc.c (gc_mark_children): add additional debug code for #11244.
|
||||
|
|
|
@ -1430,13 +1430,17 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock)
|
|||
{
|
||||
SSL *ssl;
|
||||
int ilen, nread = 0;
|
||||
int no_exception;
|
||||
int no_exception = 0;
|
||||
VALUE len, str;
|
||||
rb_io_t *fptr;
|
||||
VALUE opts = Qnil;
|
||||
|
||||
rb_scan_args(argc, argv, "11:", &len, &str, &opts);
|
||||
no_exception = get_no_exception(opts);
|
||||
if (nonblock) {
|
||||
rb_scan_args(argc, argv, "11:", &len, &str, &opts);
|
||||
no_exception = get_no_exception(opts);
|
||||
} else {
|
||||
rb_scan_args(argc, argv, "11", &len, &str);
|
||||
}
|
||||
|
||||
ilen = NUM2INT(len);
|
||||
if(NIL_P(str)) str = rb_str_new(0, ilen);
|
||||
|
|
|
@ -60,6 +60,20 @@ class OpenSSL::TestSSL < OpenSSL::SSLTestCase
|
|||
}
|
||||
end
|
||||
|
||||
def test_ssl_sysread_blocking_error
|
||||
start_server(OpenSSL::SSL::VERIFY_NONE, true) { |server, port|
|
||||
server_connect(port) { |ssl|
|
||||
ssl.write("abc\n")
|
||||
assert_raise(TypeError) { ssl.sysread(4, exception: false) }
|
||||
buf = ''
|
||||
assert_raise(ArgumentError) { ssl.sysread(4, buf, exception: false) }
|
||||
assert_equal '', buf
|
||||
assert_equal buf.object_id, ssl.sysread(4, buf).object_id
|
||||
assert_equal "abc\n", buf
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def test_connect_and_close
|
||||
start_server(OpenSSL::SSL::VERIFY_NONE, true){|server, port|
|
||||
sock = TCPSocket.new("127.0.0.1", port)
|
||||
|
|
Загрузка…
Ссылка в новой задаче