actionpack 5.2.8.1 → 6.1.6.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +383 -346
- data/MIT-LICENSE +1 -2
- data/README.rdoc +4 -3
- data/lib/abstract_controller/base.rb +38 -4
- data/lib/abstract_controller/caching/fragments.rb +6 -22
- data/lib/abstract_controller/caching.rb +1 -1
- data/lib/abstract_controller/callbacks.rb +14 -2
- data/lib/abstract_controller/collector.rb +5 -4
- data/lib/abstract_controller/helpers.rb +106 -90
- data/lib/abstract_controller/railties/routes_helpers.rb +17 -1
- data/lib/abstract_controller/rendering.rb +9 -9
- data/lib/abstract_controller/translation.rb +11 -5
- data/lib/abstract_controller.rb +1 -0
- data/lib/action_controller/api.rb +4 -3
- data/lib/action_controller/base.rb +6 -9
- data/lib/action_controller/caching.rb +1 -3
- data/lib/action_controller/log_subscriber.rb +10 -7
- data/lib/action_controller/metal/basic_implicit_render.rb +1 -1
- data/lib/action_controller/metal/conditional_get.rb +19 -5
- data/lib/action_controller/metal/content_security_policy.rb +1 -2
- data/lib/action_controller/metal/cookies.rb +3 -1
- data/lib/action_controller/metal/data_streaming.rb +6 -7
- data/lib/action_controller/metal/default_headers.rb +17 -0
- data/lib/action_controller/metal/etag_with_template_digest.rb +4 -6
- data/lib/action_controller/metal/exceptions.rb +56 -2
- data/lib/action_controller/metal/flash.rb +5 -5
- data/lib/action_controller/metal/head.rb +7 -4
- data/lib/action_controller/metal/helpers.rb +14 -5
- data/lib/action_controller/metal/http_authentication.rb +25 -23
- data/lib/action_controller/metal/implicit_render.rb +5 -15
- data/lib/action_controller/metal/instrumentation.rb +13 -14
- data/lib/action_controller/metal/live.rb +39 -32
- data/lib/action_controller/metal/logging.rb +20 -0
- data/lib/action_controller/metal/mime_responds.rb +19 -4
- data/lib/action_controller/metal/parameter_encoding.rb +35 -4
- data/lib/action_controller/metal/params_wrapper.rb +32 -22
- data/lib/action_controller/metal/permissions_policy.rb +46 -0
- data/lib/action_controller/metal/redirecting.rb +6 -6
- data/lib/action_controller/metal/renderers.rb +4 -4
- data/lib/action_controller/metal/rendering.rb +8 -3
- data/lib/action_controller/metal/request_forgery_protection.rb +26 -49
- data/lib/action_controller/metal/rescue.rb +1 -1
- data/lib/action_controller/metal/streaming.rb +0 -1
- data/lib/action_controller/metal/strong_parameters.rb +168 -59
- data/lib/action_controller/metal/url_for.rb +1 -1
- data/lib/action_controller/metal.rb +10 -8
- data/lib/action_controller/railties/helpers.rb +1 -1
- data/lib/action_controller/renderer.rb +37 -13
- data/lib/action_controller/template_assertions.rb +1 -1
- data/lib/action_controller/test_case.rb +71 -63
- data/lib/action_controller.rb +7 -4
- data/lib/action_dispatch/http/cache.rb +31 -27
- data/lib/action_dispatch/http/content_disposition.rb +45 -0
- data/lib/action_dispatch/http/content_security_policy.rb +34 -18
- data/lib/action_dispatch/http/filter_parameters.rb +9 -8
- data/lib/action_dispatch/http/filter_redirect.rb +2 -3
- data/lib/action_dispatch/http/headers.rb +4 -4
- data/lib/action_dispatch/http/mime_negotiation.rb +26 -13
- data/lib/action_dispatch/http/mime_type.rb +43 -24
- data/lib/action_dispatch/http/parameters.rb +14 -23
- data/lib/action_dispatch/http/permissions_policy.rb +173 -0
- data/lib/action_dispatch/http/request.rb +45 -22
- data/lib/action_dispatch/http/response.rb +45 -25
- data/lib/action_dispatch/http/upload.rb +9 -1
- data/lib/action_dispatch/http/url.rb +82 -82
- data/lib/action_dispatch/journey/formatter.rb +55 -31
- data/lib/action_dispatch/journey/gtg/builder.rb +22 -37
- data/lib/action_dispatch/journey/gtg/simulator.rb +8 -7
- data/lib/action_dispatch/journey/gtg/transition_table.rb +6 -5
- data/lib/action_dispatch/journey/nfa/dot.rb +0 -11
- data/lib/action_dispatch/journey/nodes/node.rb +13 -11
- data/lib/action_dispatch/journey/parser.rb +13 -13
- data/lib/action_dispatch/journey/parser.y +1 -1
- data/lib/action_dispatch/journey/path/pattern.rb +19 -21
- data/lib/action_dispatch/journey/route.rb +10 -20
- data/lib/action_dispatch/journey/router/utils.rb +14 -12
- data/lib/action_dispatch/journey/router.rb +26 -34
- data/lib/action_dispatch/journey/routes.rb +0 -2
- data/lib/action_dispatch/journey/scanner.rb +10 -4
- data/lib/action_dispatch/journey/visitors.rb +1 -4
- data/lib/action_dispatch/journey.rb +0 -2
- data/lib/action_dispatch/middleware/actionable_exceptions.rb +46 -0
- data/lib/action_dispatch/middleware/callbacks.rb +2 -4
- data/lib/action_dispatch/middleware/cookies.rb +128 -109
- data/lib/action_dispatch/middleware/debug_exceptions.rb +43 -66
- data/lib/action_dispatch/middleware/debug_locks.rb +5 -5
- data/lib/action_dispatch/middleware/debug_view.rb +66 -0
- data/lib/action_dispatch/middleware/exception_wrapper.rb +75 -30
- data/lib/action_dispatch/middleware/flash.rb +1 -1
- data/lib/action_dispatch/middleware/host_authorization.rb +170 -0
- data/lib/action_dispatch/middleware/public_exceptions.rb +6 -3
- data/lib/action_dispatch/middleware/remote_ip.rb +14 -16
- data/lib/action_dispatch/middleware/request_id.rb +5 -6
- data/lib/action_dispatch/middleware/session/abstract_store.rb +2 -3
- data/lib/action_dispatch/middleware/session/cookie_store.rb +3 -9
- data/lib/action_dispatch/middleware/show_exceptions.rb +13 -2
- data/lib/action_dispatch/middleware/ssl.rb +20 -15
- data/lib/action_dispatch/middleware/stack.rb +56 -2
- data/lib/action_dispatch/middleware/static.rb +153 -93
- data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +13 -0
- data/lib/action_dispatch/middleware/templates/rescues/_actions.text.erb +0 -0
- data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +22 -0
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +3 -1
- data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +4 -2
- data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +45 -35
- data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +7 -0
- data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +5 -0
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +23 -4
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +6 -3
- data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.text.erb +4 -1
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +104 -8
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +19 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.text.erb +3 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +2 -2
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +2 -2
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +24 -1
- data/lib/action_dispatch/railtie.rb +8 -2
- data/lib/action_dispatch/request/session.rb +11 -10
- data/lib/action_dispatch/request/utils.rb +26 -2
- data/lib/action_dispatch/routing/inspector.rb +100 -52
- data/lib/action_dispatch/routing/mapper.rb +155 -103
- data/lib/action_dispatch/routing/polymorphic_routes.rb +13 -15
- data/lib/action_dispatch/routing/redirection.rb +4 -4
- data/lib/action_dispatch/routing/route_set.rb +71 -69
- data/lib/action_dispatch/routing/url_for.rb +2 -2
- data/lib/action_dispatch/routing.rb +21 -20
- data/lib/action_dispatch/system_test_case.rb +60 -11
- data/lib/action_dispatch/system_testing/browser.rb +53 -16
- data/lib/action_dispatch/system_testing/driver.rb +11 -3
- data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +49 -7
- data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +8 -10
- data/lib/action_dispatch/testing/assertion_response.rb +0 -1
- data/lib/action_dispatch/testing/assertions/response.rb +4 -7
- data/lib/action_dispatch/testing/assertions/routing.rb +20 -8
- data/lib/action_dispatch/testing/assertions.rb +1 -1
- data/lib/action_dispatch/testing/integration.rb +60 -28
- data/lib/action_dispatch/testing/request_encoder.rb +2 -2
- data/lib/action_dispatch/testing/test_process.rb +32 -4
- data/lib/action_dispatch/testing/test_request.rb +3 -3
- data/lib/action_dispatch/testing/test_response.rb +4 -32
- data/lib/action_dispatch.rb +9 -3
- data/lib/action_pack/gem_version.rb +3 -3
- data/lib/action_pack.rb +1 -1
- metadata +34 -21
- data/lib/action_controller/metal/force_ssl.rb +0 -99
- data/lib/action_dispatch/http/parameter_filter.rb +0 -86
- data/lib/action_dispatch/journey/nfa/builder.rb +0 -78
- data/lib/action_dispatch/journey/nfa/simulator.rb +0 -49
- data/lib/action_dispatch/journey/nfa/transition_table.rb +0 -120
- data/lib/action_dispatch/system_testing/test_helpers/undef_methods.rb +0 -26
data/CHANGELOG.md
CHANGED
@@ -1,589 +1,626 @@
|
|
1
|
-
## Rails
|
1
|
+
## Rails 6.1.6.1 (July 12, 2022) ##
|
2
2
|
|
3
3
|
* No changes.
|
4
4
|
|
5
5
|
|
6
|
-
## Rails 5.
|
6
|
+
## Rails 6.1.5.1 (April 26, 2022) ##
|
7
7
|
|
8
|
-
*
|
8
|
+
* Allow Content Security Policy DSL to generate for API responses.
|
9
9
|
|
10
|
+
*Tim Wade*
|
10
11
|
|
11
|
-
## Rails
|
12
|
+
## Rails 6.1.5 (March 09, 2022) ##
|
12
13
|
|
13
|
-
*
|
14
|
+
* Fix `content_security_policy` returning invalid directives.
|
14
15
|
|
15
|
-
|
16
|
+
Directives such as `self`, `unsafe-eval` and few others were not
|
17
|
+
single quoted when the directive was the result of calling a lambda
|
18
|
+
returning an array.
|
16
19
|
|
17
|
-
|
20
|
+
```ruby
|
21
|
+
content_security_policy do |policy|
|
22
|
+
policy.frame_ancestors lambda { [:self, "https://example.com"] }
|
23
|
+
end
|
24
|
+
```
|
18
25
|
|
19
|
-
|
26
|
+
With this fix the policy generated from above will now be valid.
|
20
27
|
|
21
|
-
|
28
|
+
*Edouard Chin*
|
22
29
|
|
23
|
-
*
|
30
|
+
* Update `HostAuthorization` middleware to render debug info only
|
31
|
+
when `config.consider_all_requests_local` is set to true.
|
24
32
|
|
33
|
+
Also, blocked host info is always logged with level `error`.
|
25
34
|
|
26
|
-
|
35
|
+
Fixes #42813.
|
27
36
|
|
28
|
-
*
|
37
|
+
*Nikita Vyrko*
|
29
38
|
|
39
|
+
* Dup arrays that get "converted".
|
30
40
|
|
31
|
-
|
41
|
+
Fixes #43681.
|
32
42
|
|
33
|
-
*
|
34
|
-
response body has been fully closed which result in request state not
|
35
|
-
being fully reset before the next request
|
43
|
+
*Aaron Patterson*
|
36
44
|
|
37
|
-
|
45
|
+
* Don't show deprecation warning for equal paths.
|
38
46
|
|
47
|
+
*Anton Rieder*
|
39
48
|
|
40
|
-
|
49
|
+
* Fix crash in `ActionController::Instrumentation` with invalid HTTP formats.
|
41
50
|
|
42
|
-
|
51
|
+
Fixes #43094.
|
43
52
|
|
44
|
-
|
45
|
-
them difficult to deal with. For example, the common practice of sending
|
46
|
-
the CSRF token to a browser in a client-readable cookie does not work properly
|
47
|
-
out of the box: the value has to be url-encoded and decoded to survive transport.
|
53
|
+
*Alex Ghiculescu*
|
48
54
|
|
49
|
-
|
50
|
-
safe to transport. Validation accepts both urlsafe tokens, and strict-encoded
|
51
|
-
tokens for backwards compatibility.
|
55
|
+
* Add fallback host for SystemTestCase driven by RackTest.
|
52
56
|
|
53
|
-
|
54
|
-
config.
|
57
|
+
Fixes #42780.
|
55
58
|
|
56
|
-
|
59
|
+
*Petrik de Heus*
|
57
60
|
|
58
|
-
|
59
|
-
`urlsafe_csrf_tokens` to `true`, otherwise your form submission will start to fail
|
60
|
-
during the deploy of this new version.
|
61
|
+
* Add more detail about what hosts are allowed.
|
61
62
|
|
62
|
-
|
63
|
-
Rails.application.config.action_controller.urlsafe_csrf_tokens = true
|
64
|
-
```
|
63
|
+
*Alex Ghiculescu*
|
65
64
|
|
66
|
-
If you are upgrading from 5.2.4.x, you don't need to change this configuration.
|
67
65
|
|
68
|
-
|
66
|
+
## Rails 6.1.4.7 (March 08, 2022) ##
|
67
|
+
|
68
|
+
* No changes.
|
69
69
|
|
70
70
|
|
71
|
-
## Rails
|
71
|
+
## Rails 6.1.4.6 (February 11, 2022) ##
|
72
72
|
|
73
73
|
* No changes.
|
74
74
|
|
75
75
|
|
76
|
-
## Rails
|
76
|
+
## Rails 6.1.4.5 (February 11, 2022) ##
|
77
77
|
|
78
|
-
*
|
79
|
-
|
78
|
+
* Under certain circumstances, the middleware isn't informed that the
|
79
|
+
response body has been fully closed which result in request state not
|
80
|
+
being fully reset before the next request
|
80
81
|
|
81
|
-
|
82
|
+
[CVE-2022-23633]
|
82
83
|
|
83
|
-
`url_for` supports building polymorphic URLs via an array
|
84
|
-
of arguments (usually symbols and records). If a developer passes a
|
85
|
-
user input array, strings can result in unwanted route helper calls.
|
86
84
|
|
87
|
-
|
85
|
+
## Rails 6.1.4.4 (December 15, 2021) ##
|
88
86
|
|
89
|
-
|
87
|
+
* Fix issue with host protection not allowing host with port in development.
|
90
88
|
|
91
|
-
## Rails 5.2.4.5 (February 10, 2021) ##
|
92
89
|
|
93
|
-
|
90
|
+
## Rails 6.1.4.3 (December 14, 2021) ##
|
94
91
|
|
92
|
+
* Fix issue with host protection not allowing localhost in development.
|
95
93
|
|
96
|
-
## Rails 5.2.4.4 (September 09, 2020) ##
|
97
94
|
|
98
|
-
|
95
|
+
## Rails 6.1.4.2 (December 14, 2021) ##
|
99
96
|
|
97
|
+
* Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
|
100
98
|
|
101
|
-
## Rails
|
99
|
+
## Rails 6.1.4.1 (August 19, 2021) ##
|
102
100
|
|
103
|
-
* [CVE-
|
101
|
+
* [CVE-2021-22942] Fix possible open redirect in Host Authorization middleware.
|
104
102
|
|
105
|
-
|
103
|
+
Specially crafted "X-Forwarded-Host" headers in combination with certain
|
104
|
+
"allowed host" formats can cause the Host Authorization middleware in Action
|
105
|
+
Pack to redirect users to a malicious website.
|
106
106
|
|
107
|
+
## Rails 6.1.4 (June 24, 2021) ##
|
107
108
|
|
108
|
-
|
109
|
+
* Ignore file fixtures on `db:fixtures:load`
|
109
110
|
|
110
|
-
*
|
111
|
+
*Kevin Sjöberg*
|
111
112
|
|
113
|
+
* Fix ActionController::Live controller test deadlocks by removing the body buffer size limit for tests.
|
112
114
|
|
113
|
-
|
115
|
+
*Dylan Thacker-Smith*
|
114
116
|
|
115
|
-
*
|
117
|
+
* Correctly place optional path parameter booleans.
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
+
Previously, if you specify a url parameter that is part of the path as false it would include that part
|
120
|
+
of the path as parameter for example:
|
119
121
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
122
|
+
```
|
123
|
+
get "(/optional/:optional_id)/things" => "foo#foo", as: :things
|
124
|
+
things_path(optional_id: false) # => /things?optional_id=false
|
125
|
+
```
|
124
126
|
|
125
|
-
|
127
|
+
After this change, true and false will be treated the same when used as optional path parameters. Meaning now:
|
128
|
+
|
129
|
+
```
|
130
|
+
get '(this/:my_bool)/that' as: :that
|
126
131
|
|
132
|
+
that_path(my_bool: true) # => `/this/true/that`
|
133
|
+
that_path(my_bool: false) # => `/this/false/that`
|
134
|
+
```
|
127
135
|
|
128
|
-
|
136
|
+
*Adam Hess*
|
129
137
|
|
130
|
-
*
|
138
|
+
* Add support for 'private, no-store' Cache-Control headers.
|
131
139
|
|
140
|
+
Previously, 'no-store' was exclusive; no other directives could be specified.
|
132
141
|
|
133
|
-
|
142
|
+
*Alex Smith*
|
134
143
|
|
135
|
-
* Allow using `public` and `no-cache` together in the the Cache Control header.
|
136
144
|
|
137
|
-
|
138
|
-
it was excluded when `no-cache` was included. This change preserves the
|
139
|
-
`public` value as is.
|
145
|
+
## Rails 6.1.3.2 (May 05, 2021) ##
|
140
146
|
|
141
|
-
|
147
|
+
* Prevent open redirects by correctly escaping the host allow list
|
148
|
+
CVE-2021-22903
|
142
149
|
|
143
|
-
|
150
|
+
* Prevent catastrophic backtracking during mime parsing
|
151
|
+
CVE-2021-22902
|
144
152
|
|
145
|
-
*
|
153
|
+
* Prevent regex DoS in HTTP token authentication
|
154
|
+
CVE-2021-22904
|
146
155
|
|
147
|
-
|
156
|
+
* Prevent string polymorphic route arguments.
|
148
157
|
|
158
|
+
`url_for` supports building polymorphic URLs via an array
|
159
|
+
of arguments (usually symbols and records). If a developer passes a
|
160
|
+
user input array, strings can result in unwanted route helper calls.
|
161
|
+
|
162
|
+
CVE-2021-22885
|
149
163
|
|
150
|
-
|
164
|
+
*Gannon McGibbon*
|
165
|
+
|
166
|
+
## Rails 6.1.3.1 (March 26, 2021) ##
|
151
167
|
|
152
168
|
* No changes.
|
153
169
|
|
154
170
|
|
155
|
-
## Rails
|
171
|
+
## Rails 6.1.3 (February 17, 2021) ##
|
156
172
|
|
157
|
-
*
|
173
|
+
* Re-define routes when not set correctly via inheritance.
|
158
174
|
|
159
|
-
|
160
|
-
in system test `after_teardown`.
|
175
|
+
*John Hawthorn*
|
161
176
|
|
162
|
-
*Maxim Perepelitsa*
|
163
177
|
|
164
|
-
|
178
|
+
## Rails 6.1.2.1 (February 10, 2021) ##
|
165
179
|
|
166
|
-
|
167
|
-
mounted rack application so pass the request object as the context
|
168
|
-
when resolving dynamic CSP sources in this scenario.
|
180
|
+
* Prevent open redirect when allowed host starts with a dot
|
169
181
|
|
170
|
-
|
182
|
+
[CVE-2021-22881]
|
171
183
|
|
172
|
-
|
184
|
+
Thanks to @tktech (https://hackerone.com/tktech) for reporting this
|
185
|
+
issue and the patch!
|
173
186
|
|
174
|
-
*
|
187
|
+
*Aaron Patterson*
|
175
188
|
|
176
|
-
Previously if a dynamic source returned a symbol such as :self it
|
177
|
-
would be converted to a string implicity, e.g:
|
178
189
|
|
179
|
-
|
190
|
+
## Rails 6.1.2 (February 09, 2021) ##
|
180
191
|
|
181
|
-
|
192
|
+
* Fix error in `ActionController::LogSubscriber` that would happen when throwing inside a controller action.
|
182
193
|
|
183
|
-
|
194
|
+
*Janko Marohnić*
|
184
195
|
|
185
|
-
|
196
|
+
* Fix `fixture_file_upload` deprecation when `file_fixture_path` is a relative path.
|
186
197
|
|
187
|
-
|
198
|
+
*Eugene Kenny*
|
188
199
|
|
189
|
-
*Andrew White*
|
190
200
|
|
191
|
-
|
201
|
+
## Rails 6.1.1 (January 07, 2021) ##
|
192
202
|
|
193
|
-
|
203
|
+
* Fix nil translation key lookup in controllers/
|
194
204
|
|
195
|
-
*
|
205
|
+
*Jan Klimo*
|
196
206
|
|
197
|
-
|
207
|
+
* Quietly handle unknown HTTP methods in Action Dispatch SSL middleware.
|
198
208
|
|
209
|
+
*Alex Robbin*
|
199
210
|
|
200
|
-
|
211
|
+
* Change the request method to a `GET` when passing failed requests down to `config.exceptions_app`.
|
201
212
|
|
202
|
-
*
|
213
|
+
*Alex Robbin*
|
203
214
|
|
204
215
|
|
205
|
-
## Rails
|
216
|
+
## Rails 6.1.0 (December 09, 2020) ##
|
206
217
|
|
207
|
-
*
|
218
|
+
* Support for the HTTP header `Feature-Policy` has been revised to reflect
|
219
|
+
its [rename](https://github.com/w3c/webappsec-permissions-policy/pull/379) to [`Permissions-Policy`](https://w3c.github.io/webappsec-permissions-policy/#permissions-policy-http-header-field).
|
208
220
|
|
209
|
-
|
210
|
-
|
221
|
+
```ruby
|
222
|
+
Rails.application.config.permissions_policy do |p|
|
223
|
+
p.camera :none
|
224
|
+
p.gyroscope :none
|
225
|
+
p.microphone :none
|
226
|
+
p.usb :none
|
227
|
+
p.fullscreen :self
|
228
|
+
p.payment :self, "https://secure-example.com"
|
229
|
+
end
|
230
|
+
```
|
211
231
|
|
212
|
-
|
232
|
+
*Julien Grillot*
|
213
233
|
|
214
|
-
|
234
|
+
* Allow `ActionDispatch::HostAuthorization` to exclude specific requests.
|
215
235
|
|
216
|
-
|
236
|
+
Host Authorization checks can be skipped for specific requests. This allows for health check requests to be permitted for requests with missing or non-matching host headers.
|
217
237
|
|
218
|
-
*
|
219
|
-
`ActionController::Parameters#transform_values!` converts hashes into
|
220
|
-
parameters.
|
238
|
+
*Chris Bisnett*
|
221
239
|
|
222
|
-
|
240
|
+
* Add `config.action_dispatch.request_id_header` to allow changing the name of
|
241
|
+
the unique X-Request-Id header
|
223
242
|
|
224
|
-
*
|
243
|
+
*Arlston Fernandes*
|
225
244
|
|
226
|
-
|
227
|
-
```
|
228
|
-
params = ActionController::Parameters.new(nested_arrays: [[{ x: 2, y: 3 }, { x: 21, y: 42 }]])
|
229
|
-
params.permit!
|
230
|
-
```
|
245
|
+
* Deprecate `config.action_dispatch.return_only_media_type_on_content_type`.
|
231
246
|
|
232
|
-
|
247
|
+
*Rafael Mendonça França*
|
233
248
|
|
234
|
-
|
249
|
+
* Change `ActionDispatch::Response#content_type` to return the full Content-Type header.
|
235
250
|
|
236
|
-
*
|
237
|
-
`ActionController::TestCase` subclasses.
|
251
|
+
*Rafael Mendonça França*
|
238
252
|
|
239
|
-
|
253
|
+
* Remove deprecated `ActionDispatch::Http::ParameterFilter`.
|
240
254
|
|
241
|
-
*
|
255
|
+
*Rafael Mendonça França*
|
242
256
|
|
243
|
-
|
257
|
+
* Added support for exclusive no-store Cache-Control header.
|
244
258
|
|
245
|
-
|
259
|
+
If `no-store` is set on Cache-Control header it is exclusive (all other cache directives are dropped).
|
246
260
|
|
247
|
-
*
|
261
|
+
*Chris Kruger*
|
248
262
|
|
249
|
-
|
263
|
+
* Catch invalid UTF-8 parameters for POST requests and respond with BadRequest.
|
250
264
|
|
251
|
-
|
265
|
+
Additionally, perform `#set_binary_encoding` in `ActionDispatch::Http::Request#GET` and
|
266
|
+
`ActionDispatch::Http::Request#POST` prior to validating encoding.
|
252
267
|
|
253
|
-
*
|
268
|
+
*Adrianna Chang*
|
254
269
|
|
255
|
-
*
|
270
|
+
* Allow `assert_recognizes` routing assertions to work on mounted root routes.
|
256
271
|
|
257
|
-
*
|
272
|
+
*Gannon McGibbon*
|
258
273
|
|
274
|
+
* Change default redirection status code for non-GET/HEAD requests to 308 Permanent Redirect for `ActionDispatch::SSL`.
|
259
275
|
|
260
|
-
|
276
|
+
*Alan Tan*, *Oz Ben-David*
|
261
277
|
|
262
|
-
*
|
278
|
+
* Fix `follow_redirect!` to follow redirection with same HTTP verb when following
|
279
|
+
a 308 redirection.
|
263
280
|
|
264
|
-
*
|
281
|
+
*Alan Tan*
|
265
282
|
|
266
|
-
*
|
283
|
+
* When multiple domains are specified for a cookie, a domain will now be
|
284
|
+
chosen only if it is equal to or is a superdomain of the request host.
|
267
285
|
|
268
|
-
|
269
|
-
for a controller and/or specific actions.
|
286
|
+
*Jonathan Hefner*
|
270
287
|
|
271
|
-
|
288
|
+
* `ActionDispatch::Static` handles precompiled Brotli (.br) files.
|
272
289
|
|
273
|
-
|
290
|
+
Adds to existing support for precompiled gzip (.gz) files.
|
291
|
+
Brotli files are preferred due to much better compression.
|
274
292
|
|
275
|
-
|
276
|
-
|
277
|
-
|
293
|
+
When the browser requests /some.js with `Accept-Encoding: br`,
|
294
|
+
we check for public/some.js.br and serve that file, if present, with
|
295
|
+
`Content-Encoding: br` and `Vary: Accept-Encoding` headers.
|
278
296
|
|
279
|
-
*
|
297
|
+
*Ryan Edward Hall*, *Jeremy Daer*
|
280
298
|
|
281
|
-
* Add
|
282
|
-
Add alias method `to_h` to `to_hash` for `session`.
|
299
|
+
* Add raise_on_missing_translations support for controllers.
|
283
300
|
|
284
|
-
|
301
|
+
This configuration determines whether an error should be raised for missing translations.
|
302
|
+
It can be enabled through `config.i18n.raise_on_missing_translations`. Note that described
|
303
|
+
configuration also affects raising error for missing translations in views.
|
285
304
|
|
286
|
-
*
|
287
|
-
to meet the minimum max-age requirement for https://hstspreload.org/.
|
305
|
+
*fatkodima*
|
288
306
|
|
289
|
-
|
307
|
+
* Added `compact` and `compact!` to `ActionController::Parameters`.
|
290
308
|
|
291
|
-
*
|
309
|
+
*Eugene Kenny*
|
292
310
|
|
293
|
-
|
294
|
-
|
295
|
-
policy to include 'unsafe-inline'.
|
311
|
+
* Calling `each_pair` or `each_value` on an `ActionController::Parameters`
|
312
|
+
without passing a block now returns an enumerator.
|
296
313
|
|
297
|
-
|
298
|
-
embedded in a meta tag in a similar fashion to how CSRF protection
|
299
|
-
embeds its token in a meta tag. The UJS library can then read the
|
300
|
-
nonce value and set it on the dynamically generated script tag to
|
301
|
-
enable it to execute without needing 'unsafe-inline' enabled.
|
314
|
+
*Eugene Kenny*
|
302
315
|
|
303
|
-
|
304
|
-
user generated content in someway then it may be possible to exploit
|
305
|
-
an XSS vulnerability which can take advantage of the nonce. It is
|
306
|
-
however an improvement on a blanket permission for inline scripts.
|
316
|
+
* `fixture_file_upload` now uses path relative to `file_fixture_path`
|
307
317
|
|
308
|
-
|
309
|
-
|
318
|
+
Previously the path had to be relative to `fixture_path`.
|
319
|
+
You can change your existing code as follow:
|
310
320
|
|
311
|
-
|
312
|
-
|
313
|
-
|
321
|
+
```ruby
|
322
|
+
# Before
|
323
|
+
fixture_file_upload('files/dog.png')
|
314
324
|
|
315
|
-
|
325
|
+
# After
|
326
|
+
fixture_file_upload('dog.png')
|
327
|
+
```
|
316
328
|
|
317
|
-
*
|
329
|
+
*Edouard Chin*
|
318
330
|
|
319
|
-
*
|
331
|
+
* Remove deprecated `force_ssl` at the controller level.
|
320
332
|
|
321
|
-
|
333
|
+
*Rafael Mendonça França*
|
322
334
|
|
323
|
-
|
324
|
-
|
325
|
-
params.each do |name|
|
326
|
-
puts name
|
327
|
-
end
|
328
|
-
end
|
335
|
+
* The +helper+ class method for controllers loads helper modules specified as
|
336
|
+
strings/symbols with `String#constantize` instead of `require_dependency`.
|
329
337
|
|
330
|
-
|
331
|
-
|
332
|
-
# param_two
|
338
|
+
Remember that support for strings/symbols is only a convenient API. You can
|
339
|
+
always pass a module object:
|
333
340
|
|
334
|
-
|
341
|
+
```ruby
|
342
|
+
helper UtilsHelper
|
343
|
+
```
|
335
344
|
|
336
|
-
|
345
|
+
which is recommended because it is simple and direct. When a string/symbol
|
346
|
+
is received, `helper` just manipulates and inflects the argument to obtain
|
347
|
+
that same module object.
|
337
348
|
|
338
|
-
|
339
|
-
def index
|
340
|
-
params.each do |name, value|
|
341
|
-
puts name
|
342
|
-
end
|
343
|
-
end
|
349
|
+
*Xavier Noria*, *Jean Boussier*
|
344
350
|
|
345
|
-
|
346
|
-
# param
|
347
|
-
# param_two
|
351
|
+
* Correctly identify the entire localhost IPv4 range as trusted proxy.
|
348
352
|
|
349
|
-
*
|
353
|
+
*Nick Soracco*
|
350
354
|
|
351
|
-
*
|
355
|
+
* `url_for` will now use "https://" as the default protocol when
|
356
|
+
`Rails.application.config.force_ssl` is set to true.
|
352
357
|
|
353
|
-
*
|
358
|
+
*Jonathan Hefner*
|
354
359
|
|
355
|
-
*
|
356
|
-
user haven't specified manually another server.
|
360
|
+
* Accept and default to base64_urlsafe CSRF tokens.
|
357
361
|
|
358
|
-
|
362
|
+
Base64 strict-encoded CSRF tokens are not inherently websafe, which makes
|
363
|
+
them difficult to deal with. For example, the common practice of sending
|
364
|
+
the CSRF token to a browser in a client-readable cookie does not work properly
|
365
|
+
out of the box: the value has to be url-encoded and decoded to survive transport.
|
359
366
|
|
360
|
-
|
361
|
-
|
367
|
+
Now, we generate Base64 urlsafe-encoded CSRF tokens, which are inherently safe
|
368
|
+
to transport. Validation accepts both urlsafe tokens, and strict-encoded tokens
|
369
|
+
for backwards compatibility.
|
362
370
|
|
363
|
-
*
|
371
|
+
*Scott Blum*
|
364
372
|
|
365
|
-
*
|
373
|
+
* Support rolling deploys for cookie serialization/encryption changes.
|
366
374
|
|
367
|
-
|
375
|
+
In a distributed configuration like rolling update, users may observe
|
376
|
+
both old and new instances during deployment. Users may be served by a
|
377
|
+
new instance and then by an old instance.
|
368
378
|
|
369
|
-
|
379
|
+
That means when the server changes `cookies_serializer` from `:marshal`
|
380
|
+
to `:hybrid` or the server changes `use_authenticated_cookie_encryption`
|
381
|
+
from `false` to `true`, users may lose their sessions if they access the
|
382
|
+
server during deployment.
|
370
383
|
|
371
|
-
|
372
|
-
|
373
|
-
render the image. Other terminals, like those on Ubuntu, cannot handle the image
|
374
|
-
inline, but also don't handle it gracefully and instead of outputting the file
|
375
|
-
path, it dumps binary into the terminal.
|
384
|
+
We added fallbacks to downgrade the cookie format when necessary during
|
385
|
+
deployment, ensuring compatibility on both old and new instances.
|
376
386
|
|
377
|
-
|
387
|
+
*Masaki Hara*
|
378
388
|
|
379
|
-
|
389
|
+
* `ActionDispatch::Request.remote_ip` has ip address even when all sites are trusted.
|
380
390
|
|
381
|
-
|
391
|
+
Before, if all `X-Forwarded-For` sites were trusted, the `remote_ip` would default to `127.0.0.1`.
|
392
|
+
Now, the furthest proxy site is used. e.g.: It now gives an ip address when using curl from the load balancer.
|
382
393
|
|
383
|
-
*
|
394
|
+
*Keenan Brock*
|
384
395
|
|
385
|
-
* Fix
|
396
|
+
* Fix possible information leak / session hijacking vulnerability.
|
386
397
|
|
387
|
-
|
398
|
+
The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
|
399
|
+
gem dalli to be updated as well.
|
388
400
|
|
389
|
-
|
401
|
+
CVE-2019-16782.
|
390
402
|
|
391
|
-
*
|
403
|
+
* Include child session assertion count in ActionDispatch::IntegrationTest.
|
392
404
|
|
393
|
-
|
394
|
-
|
395
|
-
|
405
|
+
`IntegrationTest#open_session` uses `dup` to create the new session, which
|
406
|
+
meant it had its own copy of `@assertions`. This prevented the assertions
|
407
|
+
from being correctly counted and reported.
|
396
408
|
|
397
|
-
|
409
|
+
Child sessions now have their `attr_accessor` overridden to delegate to the
|
410
|
+
root session.
|
398
411
|
|
399
|
-
|
412
|
+
Fixes #32142.
|
400
413
|
|
401
|
-
|
402
|
-
Rails.application.config.content_security_policy do |p|
|
403
|
-
p.default_src :self, :https
|
404
|
-
p.font_src :self, :https, :data
|
405
|
-
p.img_src :self, :https, :data
|
406
|
-
p.object_src :none
|
407
|
-
p.script_src :self, :https
|
408
|
-
p.style_src :self, :https, :unsafe_inline
|
409
|
-
end
|
414
|
+
*Sam Bostock*
|
410
415
|
|
411
|
-
|
416
|
+
* Add SameSite protection to every written cookie.
|
412
417
|
|
413
|
-
|
414
|
-
|
415
|
-
content_security_policy do |p|
|
416
|
-
p.upgrade_insecure_requests true
|
417
|
-
end
|
418
|
-
end
|
418
|
+
Enabling `SameSite` cookie protection is an addition to CSRF protection,
|
419
|
+
where cookies won't be sent by browsers in cross-site POST requests when set to `:lax`.
|
419
420
|
|
420
|
-
|
421
|
-
class PostsController < ApplicationController
|
422
|
-
content_security_policy do |p|
|
423
|
-
p.base_uri "https://www.example.com"
|
424
|
-
end
|
425
|
-
end
|
421
|
+
`:strict` disables cookies being sent in cross-site GET or POST requests.
|
426
422
|
|
427
|
-
|
428
|
-
class PostsController < ApplicationController
|
429
|
-
content_security_policy do |p|
|
430
|
-
p.base_uri :self, -> { "https://#{current_user.domain}.example.com" }
|
431
|
-
end
|
432
|
-
end
|
423
|
+
Passing `:none` disables this protection and is the same as previous versions albeit a `; SameSite=None` is appended to the cookie.
|
433
424
|
|
434
|
-
|
435
|
-
legacy content using the `content_security_policy_report_only`
|
436
|
-
configuration attribute, e.g;
|
425
|
+
See upgrade instructions in config/initializers/new_framework_defaults_6_1.rb.
|
437
426
|
|
438
|
-
|
439
|
-
Rails.application.config.content_security_policy_report_only = true
|
427
|
+
More info [here](https://tools.ietf.org/html/draft-west-first-party-cookies-07)
|
440
428
|
|
441
|
-
|
442
|
-
class PostsController < ApplicationController
|
443
|
-
content_security_policy_report_only only: :index
|
444
|
-
end
|
429
|
+
_NB: Technically already possible as Rack supports SameSite protection, this is to ensure it's applied to all cookies_
|
445
430
|
|
446
|
-
|
447
|
-
reasons since the header is calculated at runtime.
|
431
|
+
*Cédric Fabianski*
|
448
432
|
|
449
|
-
|
433
|
+
* Bring back the feature that allows loading external route files from the router.
|
450
434
|
|
451
|
-
|
435
|
+
This feature existed back in 2012 but got reverted with the incentive that
|
436
|
+
https://github.com/rails/routing_concerns was a better approach. Turned out
|
437
|
+
that this wasn't fully the case and loading external route files from the router
|
438
|
+
can be helpful for applications with a really large set of routes.
|
439
|
+
Without this feature, application needs to implement routes reloading
|
440
|
+
themselves and it's not straightforward.
|
452
441
|
|
453
|
-
|
442
|
+
```ruby
|
443
|
+
# config/routes.rb
|
454
444
|
|
455
|
-
|
445
|
+
Rails.application.routes.draw do
|
446
|
+
draw(:admin)
|
447
|
+
end
|
456
448
|
|
457
|
-
|
449
|
+
# config/routes/admin.rb
|
458
450
|
|
459
|
-
|
451
|
+
get :foo, to: 'foo#bar'
|
452
|
+
```
|
460
453
|
|
461
|
-
|
462
|
-
different host. `allow_other_host` is `true` by default.
|
454
|
+
*Yehuda Katz*, *Edouard Chin*
|
463
455
|
|
464
|
-
|
456
|
+
* Fix system test driver option initialization for non-headless browsers.
|
465
457
|
|
466
|
-
*
|
458
|
+
*glaszig*
|
467
459
|
|
468
|
-
|
460
|
+
* `redirect_to.action_controller` notifications now include the `ActionDispatch::Request` in
|
461
|
+
their payloads as `:request`.
|
469
462
|
|
470
|
-
*
|
463
|
+
*Austin Story*
|
471
464
|
|
472
|
-
|
465
|
+
* `respond_to#any` no longer returns a response's Content-Type based on the
|
466
|
+
request format but based on the block given.
|
473
467
|
|
474
|
-
|
468
|
+
Example:
|
475
469
|
|
476
|
-
|
470
|
+
```ruby
|
471
|
+
def my_action
|
472
|
+
respond_to do |format|
|
473
|
+
format.any { render(json: { foo: 'bar' }) }
|
474
|
+
end
|
475
|
+
end
|
477
476
|
|
478
|
-
|
477
|
+
get('my_action.csv')
|
478
|
+
```
|
479
479
|
|
480
|
-
|
481
|
-
|
482
|
-
signed cookies. This also helps simplify support for legacy cookie
|
483
|
-
security.
|
480
|
+
The previous behaviour was to respond with a `text/csv` Content-Type which
|
481
|
+
is inaccurate since a JSON response is being rendered.
|
484
482
|
|
485
|
-
|
483
|
+
Now it correctly returns a `application/json` Content-Type.
|
486
484
|
|
487
|
-
*
|
485
|
+
*Edouard Chin*
|
488
486
|
|
489
|
-
|
490
|
-
connection sharing and open request detection work correctly by default.
|
487
|
+
* Replaces (back)slashes in failure screenshot image paths with dashes.
|
491
488
|
|
492
|
-
|
489
|
+
If a failed test case contained a slash or a backslash, a screenshot would be created in a
|
490
|
+
nested directory, causing issues with `tmp:clear`.
|
493
491
|
|
494
|
-
*
|
492
|
+
*Damir Zekic*
|
495
493
|
|
496
|
-
|
497
|
-
cookies[:key] = { value: "a yummy cookie", expires: 6.months }
|
494
|
+
* Add `params.member?` to mimic Hash behavior.
|
498
495
|
|
499
|
-
|
496
|
+
*Younes Serraj*
|
500
497
|
|
501
|
-
|
498
|
+
* `process_action.action_controller` notifications now include the following in their payloads:
|
502
499
|
|
503
|
-
*
|
500
|
+
* `:request` - the `ActionDispatch::Request`
|
501
|
+
* `:response` - the `ActionDispatch::Response`
|
504
502
|
|
505
|
-
|
503
|
+
*George Claghorn*
|
506
504
|
|
507
|
-
|
508
|
-
|
509
|
-
|
505
|
+
* Updated `ActionDispatch::Request.remote_ip` setter to clear set the instance
|
506
|
+
`remote_ip` to `nil` before setting the header that the value is derived
|
507
|
+
from.
|
510
508
|
|
511
|
-
|
509
|
+
Fixes #37383.
|
512
510
|
|
513
|
-
*
|
511
|
+
*Norm Provost*
|
514
512
|
|
515
|
-
*
|
513
|
+
* `ActionController::Base.log_at` allows setting a different log level per request.
|
516
514
|
|
517
|
-
|
515
|
+
```ruby
|
516
|
+
# Use the debug level if a particular cookie is set.
|
517
|
+
class ApplicationController < ActionController::Base
|
518
|
+
log_at :debug, if: -> { cookies[:debug] }
|
519
|
+
end
|
520
|
+
```
|
518
521
|
|
519
|
-
*
|
522
|
+
*George Claghorn*
|
523
|
+
|
524
|
+
* Allow system test screen shots to be taken more than once in
|
525
|
+
a test by prefixing the file name with an incrementing counter.
|
526
|
+
|
527
|
+
Add an environment variable `RAILS_SYSTEM_TESTING_SCREENSHOT_HTML` to
|
528
|
+
enable saving of HTML during a screenshot in addition to the image.
|
529
|
+
This uses the same image name, with the extension replaced with `.html`
|
520
530
|
|
521
|
-
*
|
531
|
+
*Tom Fakes*
|
522
532
|
|
523
|
-
|
524
|
-
`ActionDispatch::Response` object and can produce false-positives. Instead,
|
525
|
-
use the response helpers provided by `Rack::Response`.
|
533
|
+
* Add `Vary: Accept` header when using `Accept` header for response.
|
526
534
|
|
527
|
-
|
535
|
+
For some requests like `/users/1`, Rails uses requests' `Accept`
|
536
|
+
header to determine what to return. And if we don't add `Vary`
|
537
|
+
in the response header, browsers might accidentally cache different
|
538
|
+
types of content, which would cause issues: e.g. javascript got displayed
|
539
|
+
instead of html content. This PR fixes these issues by adding `Vary: Accept`
|
540
|
+
in these types of requests. For more detailed problem description, please read:
|
528
541
|
|
529
|
-
|
542
|
+
https://github.com/rails/rails/pull/36213
|
530
543
|
|
531
|
-
|
532
|
-
add it to `ActionController::Base` depending on
|
533
|
-
`config.action_controller.default_protect_from_forgery`. This configuration
|
534
|
-
defaults to false to support older versions which have removed it from their
|
535
|
-
`ApplicationController`, but is set to true for Rails 5.2.
|
544
|
+
Fixes #25842.
|
536
545
|
|
537
|
-
*
|
546
|
+
*Stan Lo*
|
538
547
|
|
539
|
-
*
|
548
|
+
* Fix IntegrationTest `follow_redirect!` to follow redirection using the same HTTP verb when following
|
549
|
+
a 307 redirection.
|
540
550
|
|
541
|
-
*
|
551
|
+
*Edouard Chin*
|
542
552
|
|
543
|
-
*
|
553
|
+
* System tests require Capybara 3.26 or newer.
|
544
554
|
|
545
|
-
|
546
|
-
`driven_by` will register the driver and set additional options passed via
|
547
|
-
the `:options` parameter.
|
555
|
+
*George Claghorn*
|
548
556
|
|
549
|
-
|
557
|
+
* Reduced log noise handling ActionController::RoutingErrors.
|
550
558
|
|
551
|
-
*
|
559
|
+
*Alberto Fernández-Capel*
|
552
560
|
|
553
|
-
*
|
561
|
+
* Add DSL for configuring HTTP Feature Policy.
|
554
562
|
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
this new mode is enabled via the
|
559
|
-
`action_dispatch.use_authenticated_cookie_encryption` configuration value.
|
563
|
+
This new DSL provides a way to configure an HTTP Feature Policy at a
|
564
|
+
global or per-controller level. Full details of HTTP Feature Policy
|
565
|
+
specification and guidelines can be found at MDN:
|
560
566
|
|
561
|
-
|
567
|
+
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
|
562
568
|
|
563
|
-
|
569
|
+
Example global policy:
|
570
|
+
|
571
|
+
```ruby
|
572
|
+
Rails.application.config.feature_policy do |f|
|
573
|
+
f.camera :none
|
574
|
+
f.gyroscope :none
|
575
|
+
f.microphone :none
|
576
|
+
f.usb :none
|
577
|
+
f.fullscreen :self
|
578
|
+
f.payment :self, "https://secure.example.com"
|
579
|
+
end
|
580
|
+
```
|
564
581
|
|
565
|
-
|
566
|
-
^template path ^template tree digest ^class ^id
|
582
|
+
Example controller level policy:
|
567
583
|
|
568
|
-
|
584
|
+
```ruby
|
585
|
+
class PagesController < ApplicationController
|
586
|
+
feature_policy do |p|
|
587
|
+
p.geolocation "https://example.com"
|
588
|
+
end
|
589
|
+
end
|
590
|
+
```
|
569
591
|
|
570
|
-
*
|
571
|
-
`ActiveSupport::Cache` stores and relies on the fact that Active Record has split `#cache_key` and `#cache_version`
|
572
|
-
to support it.
|
592
|
+
*Jacob Bednarz*
|
573
593
|
|
574
|
-
|
594
|
+
* Add the ability to set the CSP nonce only to the specified directives.
|
575
595
|
|
576
|
-
|
596
|
+
Fixes #35137.
|
597
|
+
|
598
|
+
*Yuji Yaginuma*
|
577
599
|
|
578
|
-
|
579
|
-
the one umbrella hook `action_controller` is not able to address certain situations where a method
|
580
|
-
may not exist in a certain implementation.
|
600
|
+
* Keep part when scope option has value.
|
581
601
|
|
582
|
-
|
602
|
+
When a route was defined within an optional scope, if that route didn't
|
603
|
+
take parameters the scope was lost when using path helpers. This commit
|
604
|
+
ensures scope is kept both when the route takes parameters or when it
|
605
|
+
doesn't.
|
606
|
+
|
607
|
+
Fixes #33219.
|
608
|
+
|
609
|
+
*Alberto Almagro*
|
610
|
+
|
611
|
+
* Added `deep_transform_keys` and `deep_transform_keys!` methods to ActionController::Parameters.
|
612
|
+
|
613
|
+
*Gustavo Gutierrez*
|
614
|
+
|
615
|
+
* Calling `ActionController::Parameters#transform_keys`/`!` without a block now returns
|
616
|
+
an enumerator for the parameters instead of the underlying hash.
|
617
|
+
|
618
|
+
*Eugene Kenny*
|
583
619
|
|
584
|
-
|
620
|
+
* Fix strong parameters blocks all attributes even when only some keys are invalid (non-numerical).
|
621
|
+
It should only block invalid key's values instead.
|
585
622
|
|
586
|
-
*
|
623
|
+
*Stan Lo*
|
587
624
|
|
588
625
|
|
589
|
-
Please check [
|
626
|
+
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionpack/CHANGELOG.md) for previous changes.
|