aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-09-25 15:03:09 -0700
committerKazuki Yamaguchi <k@rhe.jp>2020-02-24 19:12:59 +0900
commitd75456a5584373d55967cbcd8f97555cbbf434e0 (patch)
treef822f3b270c8509139d83ce22f07f89d9a0d740a
parent9907de589939d71687670df653cca7f7654fe4cc (diff)
downloadruby-openssl-d75456a5584373d55967cbcd8f97555cbbf434e0.tar.gz
Fix keyword argument separation issues in OpenSSL::SSL::SSLSocket#sys{read,write}_nonblock
[ Originally landed on ruby.git as commit 3959469f240e, then was merged into ruby/openssl.git as commit b4e96fc4abc3. This is a backport to the 2.0 branch. ] It's unlikely anyone would actually hit these. The methods are private, you only hit this code path if calling these methods before performing the SSL connection, and there is already a verbose warning issued.
-rw-r--r--ext/openssl/ossl_ssl.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c
index c6bfb831..4ddf0ad6 100644
--- a/ext/openssl/ossl_ssl.c
+++ b/ext/openssl/ossl_ssl.c
@@ -1740,8 +1740,13 @@ ossl_ssl_read_internal(int argc, VALUE *argv, VALUE self, int nonblock)
ID meth = nonblock ? rb_intern("read_nonblock") : rb_intern("sysread");
rb_warning("SSL session is not started yet.");
- if (nonblock)
- return rb_funcall(io, meth, 3, len, str, opts);
+ if (nonblock) {
+ VALUE argv[3];
+ argv[0] = len;
+ argv[1] = str;
+ argv[2] = opts;
+ return rb_funcallv_kw(io, meth, 3, argv, RB_PASS_KEYWORDS);
+ }
else
return rb_funcall(io, meth, 2, len, str);
}
@@ -1831,8 +1836,12 @@ ossl_ssl_write_internal(VALUE self, VALUE str, VALUE opts)
rb_intern("write_nonblock") : rb_intern("syswrite");
rb_warning("SSL session is not started yet.");
- if (nonblock)
- return rb_funcall(io, meth, 2, str, opts);
+ if (nonblock) {
+ VALUE argv[2];
+ argv[0] = str;
+ argv[1] = opts;
+ return rb_funcallv_kw(io, meth, 2, argv, RB_PASS_KEYWORDS);
+ }
else
return rb_funcall(io, meth, 1, str);
}