Permalink
Browse files

Give the legacy X-POST_DATA_FORMAT header greater precedence during p…

…arams parsing for backward compatibility.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7126 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 89c79b8 commit a72fe4ea45a94a09a8c31377fad935af6465b700 @jeremy jeremy committed Jun 26, 2007
Showing with 20 additions and 6 deletions.
  1. +2 −0 actionpack/CHANGELOG
  2. +8 −6 actionpack/lib/action_controller/request.rb
  3. +10 −0 actionpack/test/controller/request_test.rb
View
@@ -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 @@ def content_length
# 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 @@ def reset_session #:nodoc:
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 @@ def content_type_without_parameters
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 @@ def parse_formatted_request_parameters
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 @@ def parse_body(body)
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

0 comments on commit a72fe4e

Please sign in to comment.