1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #15118 from khelben/head_with_status_action_stack_level_too_deep

fixes stack level too deep exception on action named 'status' rendering 'head :ok'
This commit is contained in:
Rafael Mendonça França 2014-05-15 16:18:05 -03:00
commit 16a8a68b7e
6 changed files with 47 additions and 2 deletions

View file

@ -1,3 +1,10 @@
* Fix 'Stack level too deep' when rendering `head :ok` in an action method
called 'status' in a controller.
Fixes #13905.
*Christiaan Van den Poel*
* Add MKCALENDAR HTTP method (RFC 4791).
*Sergey Karpesh*

View file

@ -232,5 +232,9 @@ module ActionController
new.dispatch(name, klass.new(env))
end
end
def _status_code
@_status
end
end
end

View file

@ -27,7 +27,7 @@ module ActionController
self.status = status
self.location = url_for(location) if location
if include_content?(self.status)
if include_content?(self._status_code)
self.content_type = content_type || (Mime[formats.first] if formats)
self.response.charset = false if self.response
self.response_body = " "

View file

@ -6,7 +6,7 @@ module ActionController
extend ActiveSupport::Concern
delegate :headers, :status=, :location=, :content_type=,
:status, :location, :content_type, :to => "@_response"
:status, :location, :content_type, :_status_code, :to => "@_response"
def dispatch(action, request)
set_response!(request)

View file

@ -296,6 +296,9 @@ module ActionDispatch # :nodoc:
cookies
end
def _status_code
@status
end
private
def before_committed

View file

@ -775,3 +775,34 @@ class UrlOptionsIntegrationTest < ActionDispatch::IntegrationTest
assert_equal "/foo/1/edit", url_for(:action => 'edit', :only_path => true)
end
end
class HeadWithStatusActionIntegrationTest < ActionDispatch::IntegrationTest
class FooController < ActionController::Base
def status
head :ok
end
end
def self.routes
@routes ||= ActionDispatch::Routing::RouteSet.new
end
def self.call(env)
routes.call(env)
end
def app
self.class
end
routes.draw do
get "/foo/status" => 'head_with_status_action_integration_test/foo#status'
end
test "get /foo/status with head result does not cause stack overflow error" do
assert_nothing_raised do
get '/foo/status'
end
assert_response :ok
end
end