aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorEugene Kenny <elkenny@gmail.com>2018-05-01 01:24:32 +0100
committerEugene Kenny <elkenny@gmail.com>2018-05-01 01:24:32 +0100
commitf9e14b02c460a1963b350fb5e0e10c0e71ee175c (patch)
treeeec10e9821b317de47cf686127a589ccb11a801c /actionpack
parentee6a431bb9071151d9d546856a6451b861907202 (diff)
downloadrails-f9e14b02c460a1963b350fb5e0e10c0e71ee175c.tar.gz
rails-f9e14b02c460a1963b350fb5e0e10c0e71ee175c.tar.bz2
rails-f9e14b02c460a1963b350fb5e0e10c0e71ee175c.zip
Reset CONTENT_LENGTH between test requests
If a POST request is followed by a GET request in a controller test, the `rack.input` and `RAW_POST_DATA` headers from the first request will be reset but the `CONTENT_LENGTH` header will leak, leading the request object in the second request to incorrectly believe it has a body.
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_controller/test_case.rb1
-rw-r--r--actionpack/test/controller/test_case_test.rb8
2 files changed, 9 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/test_case.rb b/actionpack/lib/action_controller/test_case.rb
index 8f2a7e2b5f..5d784ceb31 100644
--- a/actionpack/lib/action_controller/test_case.rb
+++ b/actionpack/lib/action_controller/test_case.rb
@@ -604,6 +604,7 @@ module ActionController
env.delete "action_dispatch.request.query_parameters"
env.delete "action_dispatch.request.request_parameters"
env["rack.input"] = StringIO.new
+ env.delete "CONTENT_LENGTH"
env.delete "RAW_POST_DATA"
env
end
diff --git a/actionpack/test/controller/test_case_test.rb b/actionpack/test/controller/test_case_test.rb
index e66c409786..734da3de9c 100644
--- a/actionpack/test/controller/test_case_test.rb
+++ b/actionpack/test/controller/test_case_test.rb
@@ -689,6 +689,14 @@ XML
assert_equal "foo=baz", @request.raw_post
end
+ def test_content_length_reset_after_post_request
+ post :no_op, params: { foo: "bar" }
+ assert_not_equal 0, @request.content_length
+
+ get :no_op
+ assert_equal 0, @request.content_length
+ end
+
def test_path_is_kept_after_the_request
get :test_params, params: { id: "foo" }
assert_equal "/test_case_test/test/test_params/foo", @request.path