diff --git a/lib/puma/events.rb b/lib/puma/events.rb index 2766dcf705..63271e0967 100644 --- a/lib/puma/events.rb +++ b/lib/puma/events.rb @@ -93,7 +93,10 @@ def format(str) # parsing exception. # def parse_error(server, env, error) - @stderr.puts "#{Time.now}: HTTP parse error, malformed request (#{env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR]}): #{error.inspect}\n---\n" + @stderr.puts "#{Time.now}: HTTP parse error, malformed request " \ + "(#{env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR]}#{env[REQUEST_PATH]}): " \ + "#{error.inspect}" \ + "\n---\n" end # An SSL error has occurred. diff --git a/test/test_events.rb b/test/test_events.rb index 5477cfe8eb..676ece6af1 100644 --- a/test/test_events.rb +++ b/test/test_events.rb @@ -164,4 +164,25 @@ def test_custom_log_formatter assert_equal "-> ready", out end + + def test_parse_error + port = 0 + host = "127.0.0.1" + app = proc { |env| [200, {"Content-Type" => "plain/text"}, ["hello\n"]] } + events = Puma::Events.strings + server = Puma::Server.new app, events + + server.add_tcp_listener host, port + server.run + + sock = TCPSocket.new host, server.connected_port + path = "/" + params = "a"*1024*10 + + sock << "GET #{path}?a=#{params} HTTP/1.1\r\nConnection: close\r\n\r\n" + sock.read + sleep 0.1 # important so that the previous data is sent as a packet + assert_match %r!HTTP parse error, malformed request \(#{path}\)!, events.stderr.string + server.stop(true) + end end