diff options
author | Eugene Kenny <elkenny@gmail.com> | 2018-05-01 01:24:32 +0100 |
---|---|---|
committer | Eugene Kenny <elkenny@gmail.com> | 2018-05-01 01:24:32 +0100 |
commit | f9e14b02c460a1963b350fb5e0e10c0e71ee175c (patch) | |
tree | eec10e9821b317de47cf686127a589ccb11a801c /actionpack | |
parent | ee6a431bb9071151d9d546856a6451b861907202 (diff) | |
download | rails-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.rb | 1 | ||||
-rw-r--r-- | actionpack/test/controller/test_case_test.rb | 8 |
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 |