mirror of
https://github.com/github/rails.git
synced 2026-02-03 10:45:01 -05:00
Give the legacy X-POST_DATA_FORMAT header greater precedence during params parsing for backward compatibility.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7126 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*SVN*
|
||||
|
||||
* Give the legacy X-POST_DATA_FORMAT header greater precedence during params parsing for backward compatibility. [Jeremy Kemper]
|
||||
|
||||
* Fixed that link_to with an href of # when using :method will not allow for click-through without JavaScript #7037 [stevenbristol/josh]
|
||||
|
||||
* Fixed that radio_button_tag should generate unique ids #3353 [BobSilva/rebecca/josh]
|
||||
|
||||
@@ -68,9 +68,7 @@ module ActionController
|
||||
# For backward compatibility, the post format is extracted from the
|
||||
# X-Post-Data-Format HTTP header if present.
|
||||
def content_type
|
||||
@content_type ||=
|
||||
content_type_from_legacy_post_data_format_header ||
|
||||
Mime::Type.lookup(content_type_without_parameters)
|
||||
@content_type ||= Mime::Type.lookup(content_type_without_parameters)
|
||||
end
|
||||
|
||||
# Returns the accepted MIME type for the request
|
||||
@@ -296,8 +294,10 @@ module ActionController
|
||||
protected
|
||||
# The raw content type string. Use when you need parameters such as
|
||||
# charset or boundary which aren't included in the content_type MIME type.
|
||||
# Overridden by the X-POST_DATA_FORMAT header for backward compatibility.
|
||||
def content_type_with_parameters
|
||||
env['CONTENT_TYPE'].to_s
|
||||
content_type_from_legacy_post_data_format_header ||
|
||||
env['CONTENT_TYPE'].to_s
|
||||
end
|
||||
|
||||
# The raw content type string with its parameters stripped off.
|
||||
@@ -309,8 +309,8 @@ module ActionController
|
||||
def content_type_from_legacy_post_data_format_header
|
||||
if x_post_format = @env['HTTP_X_POST_DATA_FORMAT']
|
||||
case x_post_format.to_s.downcase
|
||||
when 'yaml'; Mime::YAML
|
||||
when 'xml'; Mime::XML
|
||||
when 'yaml'; 'application/x-yaml'
|
||||
when 'xml'; 'application/xml'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -319,6 +319,8 @@ module ActionController
|
||||
return {} if content_length.zero?
|
||||
|
||||
content_type, boundary = self.class.extract_multipart_boundary(content_type_with_parameters)
|
||||
|
||||
# Don't parse params for unknown requests.
|
||||
return {} if content_type.blank?
|
||||
|
||||
mime_type = Mime::Type.lookup(content_type)
|
||||
|
||||
@@ -758,3 +758,13 @@ class XmlParamsParsingTest < Test::Unit::TestCase
|
||||
ActionController::CgiRequest.new(cgi).request_parameters
|
||||
end
|
||||
end
|
||||
|
||||
class LegacyXmlParamsParsingTest < XmlParamsParsingTest
|
||||
private
|
||||
def parse_body(body)
|
||||
env = { 'HTTP_X_POST_DATA_FORMAT' => 'xml',
|
||||
'CONTENT_LENGTH' => body.size.to_s }
|
||||
cgi = ActionController::Integration::Session::MockCGI.new(env, body)
|
||||
ActionController::CgiRequest.new(cgi).request_parameters
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user