aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHaroon Ahmed <haroon.ahmed25@gmail.com>2019-01-07 21:24:22 +0000
committerHaroon Ahmed <haroon.ahmed25@gmail.com>2019-01-08 21:52:56 +0000
commita37cf8d383147a1e6b5f71dfe214d2e03d177872 (patch)
treeec7f9c07c07cfbb45ef05a68d5cee9a29a9c6d8c
parent8a23a0e8c20c0cccf0073906d7dd7f809bfa836d (diff)
downloadrails-a37cf8d383147a1e6b5f71dfe214d2e03d177872.tar.gz
rails-a37cf8d383147a1e6b5f71dfe214d2e03d177872.tar.bz2
rails-a37cf8d383147a1e6b5f71dfe214d2e03d177872.zip
Capture parsing errors for ActionController::ParamsWrapper#process_action
-rw-r--r--actionpack/lib/action_controller/metal/params_wrapper.rb33
1 files changed, 17 insertions, 16 deletions
diff --git a/actionpack/lib/action_controller/metal/params_wrapper.rb b/actionpack/lib/action_controller/metal/params_wrapper.rb
index 7361946de5..09716f7588 100644
--- a/actionpack/lib/action_controller/metal/params_wrapper.rb
+++ b/actionpack/lib/action_controller/metal/params_wrapper.rb
@@ -241,22 +241,8 @@ module ActionController
# Performs parameters wrapping upon the request. Called automatically
# by the metal call stack.
def process_action(*args)
- if _wrapper_enabled?
- wrapped_hash = _wrap_parameters request.request_parameters
- wrapped_keys = request.request_parameters.keys
- wrapped_filtered_hash = _wrap_parameters request.filtered_parameters.slice(*wrapped_keys)
-
- # This will make the wrapped hash accessible from controller and view.
- request.parameters.merge! wrapped_hash
- request.request_parameters.merge! wrapped_hash
-
- # This will display the wrapped hash in the log file.
- request.filtered_parameters.merge! wrapped_filtered_hash
- end
- ensure
- # NOTE: Rescues all exceptions so they
- # may be caught in ActionController::Rescue.
- return super
+ _perform_parameter_wrapping if _wrapper_enabled?
+ super
end
private
@@ -292,5 +278,20 @@ module ActionController
ref = request.content_mime_type.ref
_wrapper_formats.include?(ref) && _wrapper_key && !request.parameters.key?(_wrapper_key)
end
+
+ def _perform_parameter_wrapping
+ wrapped_hash = _wrap_parameters request.request_parameters
+ wrapped_keys = request.request_parameters.keys
+ wrapped_filtered_hash = _wrap_parameters request.filtered_parameters.slice(*wrapped_keys)
+
+ # This will make the wrapped hash accessible from controller and view.
+ request.parameters.merge! wrapped_hash
+ request.request_parameters.merge! wrapped_hash
+
+ # This will display the wrapped hash in the log file.
+ request.filtered_parameters.merge! wrapped_filtered_hash
+ rescue ActionDispatch::Http::Parameters::ParseError
+ # swallow parse error exception
+ end
end
end