Skip to content

Commit 659eb3a

Browse files
committed
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> ```
1 parent 4ee4ce8 commit 659eb3a

File tree

1 file changed

+32
-31
lines changed

1 file changed

+32
-31
lines changed

test/net/http/test_https_proxy.rb

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -56,38 +56,39 @@ def test_https_proxy_ssl_connection
5656
omit 'autoload problem. see [ruby-dev:45021][Bug #5786]'
5757
end
5858

59-
tcpserver = TCPServer.new("127.0.0.1", 0)
60-
ctx = OpenSSL::SSL::SSLContext.new
61-
ctx.key = OpenSSL::PKey.read(read_fixture("server.key"))
62-
ctx.cert = OpenSSL::X509::Certificate.new(read_fixture("server.crt"))
63-
serv = OpenSSL::SSL::SSLServer.new(tcpserver, ctx)
59+
TCPServer.open("127.0.0.1", 0) {|tcpserver|
60+
ctx = OpenSSL::SSL::SSLContext.new
61+
ctx.key = OpenSSL::PKey.read(read_fixture("server.key"))
62+
ctx.cert = OpenSSL::X509::Certificate.new(read_fixture("server.crt"))
63+
serv = OpenSSL::SSL::SSLServer.new(tcpserver, ctx)
6464

65-
_, port, _, _ = serv.addr
66-
client_thread = Thread.new {
67-
proxy = Net::HTTP.Proxy("127.0.0.1", port, 'user', 'password', true)
68-
http = proxy.new("foo.example.org", 8000)
69-
http.use_ssl = true
70-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
71-
begin
72-
http.start
73-
rescue EOFError
74-
end
75-
}
76-
server_thread = Thread.new {
77-
sock = serv.accept
78-
begin
79-
proxy_request = sock.gets("\r\n\r\n")
80-
assert_equal(
81-
"CONNECT foo.example.org:8000 HTTP/1.1\r\n" +
82-
"Host: foo.example.org:8000\r\n" +
83-
"Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==\r\n" +
84-
"\r\n",
85-
proxy_request,
86-
"[ruby-core:96672]")
87-
ensure
88-
sock.close
89-
end
65+
_, port, _, _ = serv.addr
66+
client_thread = Thread.new {
67+
proxy = Net::HTTP.Proxy("127.0.0.1", port, 'user', 'password', true)
68+
http = proxy.new("foo.example.org", 8000)
69+
http.use_ssl = true
70+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
71+
begin
72+
http.start
73+
rescue EOFError
74+
end
75+
}
76+
server_thread = Thread.new {
77+
sock = serv.accept
78+
begin
79+
proxy_request = sock.gets("\r\n\r\n")
80+
assert_equal(
81+
"CONNECT foo.example.org:8000 HTTP/1.1\r\n" +
82+
"Host: foo.example.org:8000\r\n" +
83+
"Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==\r\n" +
84+
"\r\n",
85+
proxy_request,
86+
"[ruby-core:96672]")
87+
ensure
88+
sock.close
89+
end
90+
}
91+
assert_join_threads([client_thread, server_thread])
9092
}
91-
assert_join_threads([client_thread, server_thread])
9293
end
9394
end if defined?(OpenSSL)

0 commit comments

Comments
 (0)