1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#accept):

Consider Socket#accept as well as TCPServer#accept.
  Reported by Sam Stelfox.  [ruby-core:62064] [Bug #9750]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2014-05-07 12:48:27 +00:00
parent 1386a2303f
commit 2dbae9b1f1
3 changed files with 79 additions and 1 deletions

View file

@ -1,3 +1,9 @@
Wed May 7 21:45:00 2014 Tanaka Akira <akr@fsij.org>
* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#accept):
Consider Socket#accept as well as TCPServer#accept.
Reported by Sam Stelfox. [ruby-core:62064] [Bug #9750]
Wed May 7 17:24:07 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* numeric.c (num_step_scan_args): check keyword arguments and fail

View file

@ -225,7 +225,10 @@ module OpenSSL
# Works similar to TCPServer#accept.
def accept
sock = @svr.accept
# Socket#accept returns [socket, addrinfo].
# TCPServer#accept returns a socket.
# The following comma strips addrinfo.
sock, = @svr.accept
begin
ssl = OpenSSL::SSL::SSLSocket.new(sock, @ctx)
ssl.sync_close = true

View file

@ -56,6 +56,64 @@ module SSLPair
end
end
module SSLPairLowlevelSocket
def server
host = "127.0.0.1"
port = 0
ctx = OpenSSL::SSL::SSLContext.new()
ctx.ciphers = "ADH"
ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::TEST_KEY_DH1024 }
tcps = Addrinfo.tcp(host, port).listen
ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)
return ssls
end
def client(port)
host = "127.0.0.1"
ctx = OpenSSL::SSL::SSLContext.new()
ctx.ciphers = "ADH"
s = Addrinfo.tcp(host, port).connect
ssl = OpenSSL::SSL::SSLSocket.new(s, ctx)
ssl.connect
ssl.sync_close = true
ssl
end
def ssl_pair
ssls = server
ths = Thread.new {
ns = ssls.accept
ssls.close
ns
}
port = ssls.to_io.connect_address.ip_port
thc = Thread.new {
client(port)
}
s = ths.value
c = thc.value
if block_given?
begin
yield c, s
ensure
c.close unless c.closed?
s.close unless s.closed?
end
else
return c, s
end
ensure
if ths && ths.alive?
ths.kill
ths.join
end
if thc && thc.alive?
thc.kill
thc.join
end
end
end
class OpenSSL::TestEOF1 < Test::Unit::TestCase
include TestEOF
include SSLPair
@ -309,4 +367,15 @@ class OpenSSL::TestPair < Test::Unit::TestCase
end
class OpenSSL::TestPairLowlevelSocket < Test::Unit::TestCase
include SSLPairLowlevelSocket
def test_getc
ssl_pair {|s1, s2|
s1 << "a"
assert_equal(?a, s2.getc)
}
end
end
end