diff --git a/lib/puma/server.rb b/lib/puma/server.rb index 6b3b9bb5..2f267190 100644 --- a/lib/puma/server.rb +++ b/lib/puma/server.rb @@ -804,7 +804,11 @@ module Puma # def lowlevel_error(e, env) if handler = @options[:lowlevel_error_handler] - return handler.call(e, env) + if handler.arity == 1 + return handler.call(e) + else + return handler.call(e, env) + end end if @leak_stack_on_error diff --git a/test/test_puma_server.rb b/test/test_puma_server.rb index dcc27f6e..af41d9fd 100644 --- a/test/test_puma_server.rb +++ b/test/test_puma_server.rb @@ -215,6 +215,26 @@ class TestPumaServer < Test::Unit::TestCase assert_match(/HTTP\/1.0 302 Found/, data) end + def test_leh_gets_env_as_well + @events = Puma::Events.strings + re = lambda { |err,env| + env['REQUEST_PATH'] || raise("where is env?") + [302, {'Content-Type' => 'text', 'Location' => 'foo.html'}, ['302 found']] + } + + @server = Puma::Server.new @app, @events, {:lowlevel_error_handler => re} + + @server.app = proc { |e| raise "don't leak me bro" } + @server.add_tcp_listener @host, @port + @server.run + + sock = TCPSocket.new @host, @server.connected_port + sock << "GET / HTTP/1.0\r\n\r\n" + + data = sock.read + assert_match(/HTTP\/1.0 302 Found/, data) + end + def test_custom_http_codes_10 @server.app = proc { |env| [449, {}, [""]] }