diff options
author | Hiroshi SHIBATA <[email protected]> | 2024-07-16 11:44:20 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <[email protected]> | 2024-07-17 17:37:57 +0900 |
commit | f4c642edb108c5365c282b95cf429a0313b1c452 (patch) | |
tree | dae69a6b3e42ad90d81acca0102b1beb974ac951 | |
parent | 2b3bfbc4c722d1d051a29721a1a8f86d2c3939a7 (diff) |
Fixed fd leak from TCPServer
```
Leaked file descriptor: HTTPSProxyTest#test_https_proxy_ssl_connection: 8 : #<TCPServer:fd 8, AF_INET, 127.0.0.1, 63104>
```
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/11171
-rw-r--r-- | test/net/http/test_https_proxy.rb | 63 |
1 files changed, 32 insertions, 31 deletions
diff --git a/test/net/http/test_https_proxy.rb b/test/net/http/test_https_proxy.rb index 4225f9836c..f4c6aa0b6a 100644 --- a/test/net/http/test_https_proxy.rb +++ b/test/net/http/test_https_proxy.rb @@ -56,38 +56,39 @@ class HTTPSProxyTest < Test::Unit::TestCase omit 'autoload problem. see [ruby-dev:45021][Bug #5786]' end - tcpserver = TCPServer.new("127.0.0.1", 0) - ctx = OpenSSL::SSL::SSLContext.new - ctx.key = OpenSSL::PKey.read(read_fixture("server.key")) - ctx.cert = OpenSSL::X509::Certificate.new(read_fixture("server.crt")) - serv = OpenSSL::SSL::SSLServer.new(tcpserver, ctx) + TCPServer.open("127.0.0.1", 0) {|tcpserver| + ctx = OpenSSL::SSL::SSLContext.new + ctx.key = OpenSSL::PKey.read(read_fixture("server.key")) + ctx.cert = OpenSSL::X509::Certificate.new(read_fixture("server.crt")) + serv = OpenSSL::SSL::SSLServer.new(tcpserver, ctx) - _, port, _, _ = serv.addr - client_thread = Thread.new { - proxy = Net::HTTP.Proxy("127.0.0.1", port, 'user', 'password', true) - http = proxy.new("foo.example.org", 8000) - http.use_ssl = true - http.verify_mode = OpenSSL::SSL::VERIFY_NONE - begin - http.start - rescue EOFError - end - } - server_thread = Thread.new { - sock = serv.accept - begin - proxy_request = sock.gets("\r\n\r\n") - assert_equal( - "CONNECT foo.example.org:8000 HTTP/1.1\r\n" + - "Host: foo.example.org:8000\r\n" + - "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==\r\n" + - "\r\n", - proxy_request, - "[ruby-core:96672]") - ensure - sock.close - end + _, port, _, _ = serv.addr + client_thread = Thread.new { + proxy = Net::HTTP.Proxy("127.0.0.1", port, 'user', 'password', true) + http = proxy.new("foo.example.org", 8000) + http.use_ssl = true + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + begin + http.start + rescue EOFError + end + } + server_thread = Thread.new { + sock = serv.accept + begin + proxy_request = sock.gets("\r\n\r\n") + assert_equal( + "CONNECT foo.example.org:8000 HTTP/1.1\r\n" + + "Host: foo.example.org:8000\r\n" + + "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==\r\n" + + "\r\n", + proxy_request, + "[ruby-core:96672]") + ensure + sock.close + end + } + assert_join_threads([client_thread, server_thread]) } - assert_join_threads([client_thread, server_thread]) end end if defined?(OpenSSL) |