Do not try to call ExceptionHandler#call_exception_with_status_code on a closed response. Fixes #514
This commit is contained in:
parent
0fa869cf96
commit
b0a17ac9b4
2 changed files with 11 additions and 0 deletions
|
@ -102,4 +102,14 @@ describe "Kemal::ExceptionHandler" do
|
||||||
response.headers["Content-Type"].should eq "application/json"
|
response.headers["Content-Type"].should eq "application/json"
|
||||||
response.body.should eq "Rendered error with 500"
|
response.body.should eq "Rendered error with 500"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "does not do anything on a closed io" do
|
||||||
|
get "/" do |env|
|
||||||
|
halt env, status_code: 404
|
||||||
|
end
|
||||||
|
|
||||||
|
request = HTTP::Request.new("GET", "/")
|
||||||
|
client_response = call_request_on_app(request)
|
||||||
|
client_response.status_code.should eq 404
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,6 +18,7 @@ module Kemal
|
||||||
end
|
end
|
||||||
|
|
||||||
private def call_exception_with_status_code(context : HTTP::Server::Context, exception : Exception, status_code : Int32)
|
private def call_exception_with_status_code(context : HTTP::Server::Context, exception : Exception, status_code : Int32)
|
||||||
|
return if context.response.closed?
|
||||||
if !Kemal.config.error_handlers.empty? && Kemal.config.error_handlers.has_key?(status_code)
|
if !Kemal.config.error_handlers.empty? && Kemal.config.error_handlers.has_key?(status_code)
|
||||||
context.response.content_type = "text/html" unless context.response.headers.has_key?("Content-Type")
|
context.response.content_type = "text/html" unless context.response.headers.has_key?("Content-Type")
|
||||||
context.response.status_code = status_code
|
context.response.status_code = status_code
|
||||||
|
|
Loading…
Reference in a new issue