summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/net/protocol.rb3
-rw-r--r--test/net/smtp/test_smtp.rb22
2 files changed, 23 insertions, 2 deletions
diff --git a/lib/net/protocol.rb b/lib/net/protocol.rb
index 1ea7f6bfc3..518b92c4ab 100644
--- a/lib/net/protocol.rb
+++ b/lib/net/protocol.rb
@@ -181,8 +181,7 @@ module Net # :nodoc:
@io.to_io.wait_writable(@read_timeout) or raise Net::ReadTimeout
# continue looping
when nil
- # callers do not care about backtrace, so avoid allocating for it
- raise EOFError, 'end of file reached', []
+ raise EOFError, 'end of file reached'
end while true
end
diff --git a/test/net/smtp/test_smtp.rb b/test/net/smtp/test_smtp.rb
index 01b8ae504c..89a08cb17b 100644
--- a/test/net/smtp/test_smtp.rb
+++ b/test/net/smtp/test_smtp.rb
@@ -157,6 +157,28 @@ module Net
end
end
+ def test_eof_error_backtrace
+ bug13018 = '[ruby-core:78550] [Bug #13018]'
+ servers = Socket.tcp_server_sockets("localhost", 0)
+ begin
+ sock = nil
+ Thread.start do
+ sock = accept(servers)
+ sock.close
+ end
+ smtp = Net::SMTP.new("localhost", servers[0].local_address.ip_port)
+ e = assert_raise(EOFError, bug13018) do
+ smtp.start do
+ end
+ end
+ assert_equal(EOFError, e.class, bug13018)
+ assert(e.backtrace.grep(%r"\bnet/smtp\.rb:").size > 0, bug13018)
+ ensure
+ sock.close if sock
+ servers.each(&:close)
+ end
+ end
+
private
def accept(servers)