Rewind request body after reading it, if possible. Closes #8438.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6815 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jeremy Kemper 2007-05-23 05:43:00 +00:00
parent d418b7d391
commit b0d01921d8
3 changed files with 22 additions and 1 deletions

View File

@ -1,5 +1,7 @@
*SVN*
* Rewind request body after reading it, if possible. #8438 [s450r1]
* Resource namespaces are inherited by their has_many subresources. #8280 [marclove, ggarside]
* Fix filtered parameter logging with nil parameter values. #8422 [choonkeat]

View File

@ -330,7 +330,9 @@ module ActionController
# Only multipart form parsing expects a stream.
if strategy && strategy != :multipart_form
body = body.read(content_length)
data = body.read(content_length)
body.rewind if body.respond_to?(:rewind)
body = data
end
case strategy

View File

@ -68,3 +68,20 @@ class CgiRequestParamsParsingTest < BaseCgiTest
assert_equal({"flamenco"=> "love"}, @request.request_parameters)
end
end
class CgiRequestNeedsRewoundTest < BaseCgiTest
def test_body_should_be_rewound
data = 'foo'
fake_cgi = Struct.new(:env_table, :query_string, :stdinput).new(@request_hash, '', StringIO.new(data))
fake_cgi.env_table['CONTENT_LENGTH'] = data.length
fake_cgi.env_table['CONTENT_TYPE'] = 'application/x-www-form-urlencoded; charset=utf-8'
# Read the request body by parsing params.
request = ActionController::CgiRequest.new(fake_cgi)
request.request_parameters
# Should have rewound the body.
assert_equal 0, request.body.pos
end
end