diff options
author | Haroon Ahmed <haroon.ahmed25@gmail.com> | 2019-01-07 21:24:22 +0000 |
---|---|---|
committer | Haroon Ahmed <haroon.ahmed25@gmail.com> | 2019-01-08 21:52:56 +0000 |
commit | a37cf8d383147a1e6b5f71dfe214d2e03d177872 (patch) | |
tree | ec7f9c07c07cfbb45ef05a68d5cee9a29a9c6d8c | |
parent | 8a23a0e8c20c0cccf0073906d7dd7f809bfa836d (diff) | |
download | rails-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.rb | 33 |
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 |