aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
authorNick Sieger <nick@nicksieger.com>2016-07-27 11:58:55 -0500
committerNick Sieger <nick@nicksieger.com>2016-07-27 11:58:55 -0500
commit407583478ad6d171ae72f81c560bf01c1446117f (patch)
treee087bad3bcc693b6a1fdcd70b67653bcaeab04f4 /actionpack/test
parent7e6996a1b36cdf8158a27eeaa7e6d97a05994707 (diff)
downloadrails-407583478ad6d171ae72f81c560bf01c1446117f.tar.gz
rails-407583478ad6d171ae72f81c560bf01c1446117f.tar.bz2
rails-407583478ad6d171ae72f81c560bf01c1446117f.zip
Reset rack.input when the environment is scrubbed for the next request
Before this change, posted parameters would leak across requests. The included test case failed like so: 1) Failure: TestCaseTest#test_multiple_mixed_method_process_should_scrub_rack_input: --- expected +++ actual @@ -1 +1 @@ -{"bar"=>"an bar", "controller"=>"test_case_test/test", "action"=>"test_params"} +{"foo"=>"an foo", "bar"=>"an bar", "controller"=>"test_case_test/test", "action"=>"test_params"} An argument could be made that this situation isn't encountered often and that one should limit the number of requests per test case, but I still think the parameter leaking is an unexpected side-effect.
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/controller/test_case_test.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/actionpack/test/controller/test_case_test.rb b/actionpack/test/controller/test_case_test.rb
index ea59156f65..e288b51716 100644
--- a/actionpack/test/controller/test_case_test.rb
+++ b/actionpack/test/controller/test_case_test.rb
@@ -854,6 +854,14 @@ XML
assert_nil cookies['foo']
end
+ def test_multiple_mixed_method_process_should_scrub_rack_input
+ post :test_params, params: { id: 1, foo: 'an foo' }
+ assert_equal({"id"=>"1", "foo" => "an foo", "controller"=>"test_case_test/test", "action"=>"test_params"}, ::JSON.parse(@response.body))
+
+ get :test_params, params: { bar: 'an bar' }
+ assert_equal({"bar"=>"an bar", "controller"=>"test_case_test/test", "action"=>"test_params"}, ::JSON.parse(@response.body))
+ end
+
%w(controller response request).each do |variable|
%w(get post put delete head process).each do |method|
define_method("test_#{variable}_missing_for_#{method}_raises_error") do