mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
Don't leak info when not in development. Fixes #256
This commit is contained in:
parent
1660c8b7fa
commit
a99a3f0bfe
3 changed files with 38 additions and 3 deletions
|
@ -302,6 +302,10 @@ module Puma
|
|||
ENV['RACK_ENV'] = env
|
||||
end
|
||||
|
||||
def development?
|
||||
@options[:environment] == "development"
|
||||
end
|
||||
|
||||
def delete_pidfile
|
||||
if path = @options[:pidfile]
|
||||
File.unlink path
|
||||
|
@ -512,6 +516,10 @@ module Puma
|
|||
server.min_threads = @options[:min_threads]
|
||||
server.max_threads = @options[:max_threads]
|
||||
|
||||
unless development?
|
||||
server.leak_stack_on_error = false
|
||||
end
|
||||
|
||||
@server = server
|
||||
|
||||
if str = @options[:control_url]
|
||||
|
@ -597,6 +605,10 @@ module Puma
|
|||
server.max_threads = max_t
|
||||
server.inherit_binder @binder
|
||||
|
||||
unless development?
|
||||
server.leak_stack_on_error = false
|
||||
end
|
||||
|
||||
Signal.trap "SIGTERM" do
|
||||
server.stop
|
||||
end
|
||||
|
|
|
@ -68,10 +68,12 @@ module Puma
|
|||
|
||||
@first_data_timeout = FIRST_DATA_TIMEOUT
|
||||
|
||||
@leak_stack_on_error = true
|
||||
|
||||
ENV['RACK_ENV'] ||= "development"
|
||||
end
|
||||
|
||||
attr_accessor :binder
|
||||
attr_accessor :binder, :leak_stack_on_error
|
||||
|
||||
forward :add_tcp_listener, :@binder
|
||||
forward :add_ssl_listener, :@binder
|
||||
|
@ -379,7 +381,7 @@ module Puma
|
|||
|
||||
return :async
|
||||
end
|
||||
rescue => e
|
||||
rescue StandardError => e
|
||||
@events.unknown_error self, e, "Rack app"
|
||||
|
||||
status, headers, res_body = lowlevel_error(e)
|
||||
|
@ -571,7 +573,11 @@ module Puma
|
|||
# A fallback rack response if +@app+ raises as exception.
|
||||
#
|
||||
def lowlevel_error(e)
|
||||
[500, {}, ["Puma caught this error: #{e}\n#{e.backtrace.join("\n")}"]]
|
||||
if @leak_stack_on_error
|
||||
[500, {}, ["Puma caught this error: #{e.message} (#{e.class})\n#{e.backtrace.join("\n")}"]]
|
||||
else
|
||||
[500, {}, ["A really lowlevel plumbing error occured. Please contact your local Maytag(tm) repair man.\n"]]
|
||||
end
|
||||
end
|
||||
|
||||
# Wait for all outstanding requests to finish.
|
||||
|
|
|
@ -204,4 +204,21 @@ class TestPumaServer < Test::Unit::TestCase
|
|||
|
||||
assert_equal "HTTP/1.0 200 OK\r\n\r\n", data
|
||||
end
|
||||
|
||||
def test_doesnt_print_backtrace_in_production
|
||||
@events = Puma::Events.strings
|
||||
@server = Puma::Server.new @app, @events
|
||||
|
||||
@server.app = proc { |e| raise "don't leak me bro" }
|
||||
@server.leak_stack_on_error = false
|
||||
@server.add_tcp_listener @host, @port
|
||||
@server.run
|
||||
|
||||
sock = TCPSocket.new @host, @port
|
||||
sock << "GET / HTTP/1.0\r\n\r\n"
|
||||
|
||||
data = sock.read
|
||||
|
||||
assert_not_match(/don't leak me bro/, data)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue