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:
parent
d418b7d391
commit
b0d01921d8
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue