actionpack 6.1.7.5 → 7.0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +323 -399
  3. data/MIT-LICENSE +1 -0
  4. data/README.rdoc +4 -5
  5. data/lib/abstract_controller/asset_paths.rb +1 -1
  6. data/lib/abstract_controller/base.rb +13 -26
  7. data/lib/abstract_controller/caching/fragments.rb +2 -2
  8. data/lib/abstract_controller/caching.rb +1 -1
  9. data/lib/abstract_controller/callbacks.rb +21 -7
  10. data/lib/abstract_controller/collector.rb +2 -2
  11. data/lib/abstract_controller/error.rb +1 -1
  12. data/lib/abstract_controller/helpers.rb +17 -12
  13. data/lib/abstract_controller/logger.rb +1 -1
  14. data/lib/abstract_controller/railties/routes_helpers.rb +2 -0
  15. data/lib/abstract_controller/rendering.rb +9 -11
  16. data/lib/abstract_controller/translation.rb +27 -4
  17. data/lib/abstract_controller/url_for.rb +4 -6
  18. data/lib/action_controller/api.rb +7 -7
  19. data/lib/action_controller/base.rb +5 -4
  20. data/lib/action_controller/form_builder.rb +2 -2
  21. data/lib/action_controller/log_subscriber.rb +4 -3
  22. data/lib/action_controller/metal/basic_implicit_render.rb +3 -1
  23. data/lib/action_controller/metal/conditional_get.rb +137 -102
  24. data/lib/action_controller/metal/content_security_policy.rb +36 -2
  25. data/lib/action_controller/metal/cookies.rb +1 -1
  26. data/lib/action_controller/metal/data_streaming.rb +23 -31
  27. data/lib/action_controller/metal/etag_with_flash.rb +1 -1
  28. data/lib/action_controller/metal/exceptions.rb +19 -30
  29. data/lib/action_controller/metal/flash.rb +6 -2
  30. data/lib/action_controller/metal/head.rb +1 -1
  31. data/lib/action_controller/metal/helpers.rb +2 -2
  32. data/lib/action_controller/metal/http_authentication.rb +66 -39
  33. data/lib/action_controller/metal/instrumentation.rb +57 -52
  34. data/lib/action_controller/metal/live.rb +43 -2
  35. data/lib/action_controller/metal/mime_responds.rb +3 -3
  36. data/lib/action_controller/metal/params_wrapper.rb +20 -11
  37. data/lib/action_controller/metal/permissions_policy.rb +19 -28
  38. data/lib/action_controller/metal/redirecting.rb +95 -22
  39. data/lib/action_controller/metal/renderers.rb +12 -13
  40. data/lib/action_controller/metal/rendering.rb +121 -9
  41. data/lib/action_controller/metal/request_forgery_protection.rb +83 -32
  42. data/lib/action_controller/metal/rescue.rb +5 -4
  43. data/lib/action_controller/metal/streaming.rb +7 -9
  44. data/lib/action_controller/metal/strong_parameters.rb +138 -115
  45. data/lib/action_controller/metal/testing.rb +9 -2
  46. data/lib/action_controller/metal/url_for.rb +3 -5
  47. data/lib/action_controller/metal.rb +10 -13
  48. data/lib/action_controller/railtie.rb +50 -6
  49. data/lib/action_controller/renderer.rb +1 -20
  50. data/lib/action_controller/test_case.rb +28 -7
  51. data/lib/action_controller.rb +2 -5
  52. data/lib/action_dispatch/http/cache.rb +20 -13
  53. data/lib/action_dispatch/http/content_security_policy.rb +113 -36
  54. data/lib/action_dispatch/http/filter_parameters.rb +4 -19
  55. data/lib/action_dispatch/http/headers.rb +1 -1
  56. data/lib/action_dispatch/http/mime_negotiation.rb +15 -5
  57. data/lib/action_dispatch/http/mime_type.rb +9 -11
  58. data/lib/action_dispatch/http/parameters.rb +5 -5
  59. data/lib/action_dispatch/http/permissions_policy.rb +17 -1
  60. data/lib/action_dispatch/http/request.rb +27 -37
  61. data/lib/action_dispatch/http/response.rb +3 -20
  62. data/lib/action_dispatch/http/upload.rb +13 -2
  63. data/lib/action_dispatch/http/url.rb +11 -19
  64. data/lib/action_dispatch/journey/gtg/builder.rb +11 -12
  65. data/lib/action_dispatch/journey/gtg/simulator.rb +10 -4
  66. data/lib/action_dispatch/journey/gtg/transition_table.rb +77 -21
  67. data/lib/action_dispatch/journey/nodes/node.rb +70 -5
  68. data/lib/action_dispatch/journey/path/pattern.rb +22 -13
  69. data/lib/action_dispatch/journey/route.rb +6 -13
  70. data/lib/action_dispatch/journey/router/utils.rb +2 -2
  71. data/lib/action_dispatch/journey/router.rb +1 -1
  72. data/lib/action_dispatch/journey/routes.rb +3 -3
  73. data/lib/action_dispatch/journey/visualizer/fsm.js +49 -24
  74. data/lib/action_dispatch/journey/visualizer/index.html.erb +1 -1
  75. data/lib/action_dispatch/middleware/actionable_exceptions.rb +0 -1
  76. data/lib/action_dispatch/middleware/cookies.rb +20 -13
  77. data/lib/action_dispatch/middleware/debug_exceptions.rb +6 -4
  78. data/lib/action_dispatch/middleware/debug_locks.rb +3 -3
  79. data/lib/action_dispatch/middleware/exception_wrapper.rb +4 -0
  80. data/lib/action_dispatch/middleware/executor.rb +3 -0
  81. data/lib/action_dispatch/middleware/flash.rb +17 -18
  82. data/lib/action_dispatch/middleware/host_authorization.rb +13 -17
  83. data/lib/action_dispatch/middleware/remote_ip.rb +20 -8
  84. data/lib/action_dispatch/middleware/request_id.rb +3 -3
  85. data/lib/action_dispatch/middleware/server_timing.rb +76 -0
  86. data/lib/action_dispatch/middleware/session/abstract_store.rb +1 -1
  87. data/lib/action_dispatch/middleware/session/cookie_store.rb +9 -9
  88. data/lib/action_dispatch/middleware/show_exceptions.rb +17 -16
  89. data/lib/action_dispatch/middleware/stack.rb +27 -9
  90. data/lib/action_dispatch/middleware/static.rb +5 -9
  91. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +1 -1
  92. data/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb +4 -11
  93. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +2 -2
  94. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +10 -5
  95. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +7 -3
  96. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +4 -4
  97. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +3 -3
  98. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +28 -18
  99. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +3 -3
  100. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +3 -3
  101. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +3 -3
  102. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +3 -3
  103. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +3 -3
  104. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +22 -22
  105. data/lib/action_dispatch/railtie.rb +8 -2
  106. data/lib/action_dispatch/request/session.rb +43 -13
  107. data/lib/action_dispatch/routing/inspector.rb +1 -1
  108. data/lib/action_dispatch/routing/mapper.rb +82 -83
  109. data/lib/action_dispatch/routing/redirection.rb +5 -2
  110. data/lib/action_dispatch/routing/route_set.rb +17 -7
  111. data/lib/action_dispatch/routing/routes_proxy.rb +1 -1
  112. data/lib/action_dispatch/routing/url_for.rb +24 -25
  113. data/lib/action_dispatch/routing.rb +5 -6
  114. data/lib/action_dispatch/system_test_case.rb +5 -5
  115. data/lib/action_dispatch/system_testing/browser.rb +3 -13
  116. data/lib/action_dispatch/system_testing/driver.rb +34 -10
  117. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +11 -7
  118. data/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +0 -8
  119. data/lib/action_dispatch/testing/assertions/response.rb +1 -1
  120. data/lib/action_dispatch/testing/assertions/routing.rb +3 -2
  121. data/lib/action_dispatch/testing/assertions.rb +2 -5
  122. data/lib/action_dispatch/testing/integration.rb +6 -8
  123. data/lib/action_dispatch/testing/test_process.rb +3 -29
  124. data/lib/action_dispatch/testing/test_response.rb +20 -2
  125. data/lib/action_dispatch.rb +1 -0
  126. data/lib/action_pack/gem_version.rb +5 -5
  127. data/lib/action_pack/version.rb +1 -1
  128. metadata +16 -15
data/CHANGELOG.md CHANGED
@@ -1,673 +1,597 @@
1
- ## Rails 6.1.7.5 (August 22, 2023) ##
1
+ ## Rails 7.0.8.1 (February 21, 2024) ##
2
2
 
3
- * No changes.
4
-
5
-
6
- ## Rails 6.1.7.4 (June 26, 2023) ##
7
-
8
- * Raise an exception if illegal characters are provide to redirect_to
9
- [CVE-2023-28362]
3
+ * Fix possible XSS vulnerability with the `translate` method in controllers
10
4
 
11
- *Zack Deveau*
12
-
13
- ## Rails 6.1.7.3 (March 13, 2023) ##
5
+ CVE-2024-26143
14
6
 
15
- * No changes.
7
+ ## Rails 7.0.8 (September 09, 2023) ##
16
8
 
9
+ * Fix `HostAuthorization` potentially displaying the value of the
10
+ X_FORWARDED_HOST header when the HTTP_HOST header is being blocked.
17
11
 
18
- ## Rails 6.1.7.2 (January 24, 2023) ##
12
+ *Hartley McGuire*, *Daniel Schlosser*
19
13
 
20
- * Fix `domain: :all` for two letter TLD
21
14
 
22
- This fixes a compatibility issue introduced in our previous security
23
- release when using `domain: :all` with a two letter but single level top
24
- level domain domain (like `.ca`, rather than `.co.uk`).
25
-
26
-
27
- ## Rails 6.1.7.1 (January 17, 2023) ##
28
-
29
- * Avoid regex backtracking on If-None-Match header
30
-
31
- [CVE-2023-22795]
32
-
33
- * Use string#split instead of regex for domain parts
34
-
35
- [CVE-2023-22792]
36
-
37
-
38
- ## Rails 6.1.7 (September 09, 2022) ##
15
+ ## Rails 7.0.7.2 (August 22, 2023) ##
39
16
 
40
17
  * No changes.
41
18
 
42
19
 
43
- ## Rails 6.1.6.1 (July 12, 2022) ##
20
+ ## Rails 7.0.7.1 (August 22, 2023) ##
44
21
 
45
22
  * No changes.
46
23
 
47
24
 
48
- ## Rails 6.1.6 (May 09, 2022) ##
25
+ ## Rails 7.0.7 (August 09, 2023) ##
49
26
 
50
27
  * No changes.
51
28
 
52
29
 
53
- ## Rails 6.1.5.1 (April 26, 2022) ##
30
+ ## Rails 7.0.6 (June 29, 2023) ##
54
31
 
55
- * Allow Content Security Policy DSL to generate for API responses.
32
+ * No changes.
56
33
 
57
- *Tim Wade*
58
34
 
59
- ## Rails 6.1.5 (March 09, 2022) ##
35
+ ## Rails 7.0.5.1 (June 26, 2023) ##
60
36
 
61
- * Fix `content_security_policy` returning invalid directives.
62
-
63
- Directives such as `self`, `unsafe-eval` and few others were not
64
- single quoted when the directive was the result of calling a lambda
65
- returning an array.
37
+ * Raise an exception if illegal characters are provide to redirect_to
38
+ [CVE-2023-28362]
66
39
 
67
- ```ruby
68
- content_security_policy do |policy|
69
- policy.frame_ancestors lambda { [:self, "https://example.com"] }
70
- end
71
- ```
40
+ *Zack Deveau*
72
41
 
73
- With this fix the policy generated from above will now be valid.
42
+ ## Rails 7.0.5 (May 24, 2023) ##
74
43
 
75
- *Edouard Chin*
44
+ * Do not return CSP headers for 304 Not Modified responses.
76
45
 
77
- * Update `HostAuthorization` middleware to render debug info only
78
- when `config.consider_all_requests_local` is set to true.
46
+ *Tobias Kraze*
79
47
 
80
- Also, blocked host info is always logged with level `error`.
48
+ * Fix `EtagWithFlash` when there is no `Flash` middleware available.
81
49
 
82
- Fixes #42813.
50
+ *fatkodima*
83
51
 
84
- *Nikita Vyrko*
52
+ * Fix content-type header with `send_stream`.
85
53
 
86
- * Dup arrays that get "converted".
54
+ *Elliot Crosby-McCullough*
87
55
 
88
- Fixes #43681.
56
+ * Address Selenium `:capabilities` deprecation warning.
89
57
 
90
- *Aaron Patterson*
58
+ *Ron Shinall*
91
59
 
92
- * Don't show deprecation warning for equal paths.
60
+ * Fix cookie domain for domain: all on two letter single level TLD.
93
61
 
94
- *Anton Rieder*
62
+ *John Hawthorn*
95
63
 
96
- * Fix crash in `ActionController::Instrumentation` with invalid HTTP formats.
64
+ * Don't double log the `controller`, `action`, or `namespaced_controller` when using `ActiveRecord::QueryLog`
97
65
 
98
- Fixes #43094.
66
+ Previously if you set `config.active_record.query_log_tags` to an array that included
67
+ `:controller`, `:namespaced_controller`, or `:action`, that item would get logged twice.
68
+ This bug has been fixed.
99
69
 
100
70
  *Alex Ghiculescu*
101
71
 
102
- * Add fallback host for SystemTestCase driven by RackTest.
103
-
104
- Fixes #42780.
105
-
106
- *Petrik de Heus*
72
+ * Rescue `EOFError` exception from `rack` on a multipart request.
107
73
 
108
- * Add more detail about what hosts are allowed.
109
-
110
- *Alex Ghiculescu*
74
+ *Nikita Vasilevsky*
111
75
 
76
+ * Rescue `JSON::ParserError` in Cookies json deserializer to discards marshal dumps:
112
77
 
113
- ## Rails 6.1.4.7 (March 08, 2022) ##
78
+ Without this change, if `action_dispatch.cookies_serializer` is set to `:json` and
79
+ the app tries to read a `:marshal` serialized cookie, it would error out which wouldn't
80
+ clear the cookie and force app users to manually clear it in their browser.
114
81
 
115
- * No changes.
82
+ (See #45127 for original bug discussion)
116
83
 
84
+ *Nathan Bardoux*
117
85
 
118
- ## Rails 6.1.4.6 (February 11, 2022) ##
86
+ ## Rails 7.0.4.3 (March 13, 2023) ##
119
87
 
120
88
  * No changes.
121
89
 
122
90
 
123
- ## Rails 6.1.4.5 (February 11, 2022) ##
91
+ ## Rails 7.0.4.2 (January 24, 2023) ##
124
92
 
125
- * Under certain circumstances, the middleware isn't informed that the
126
- response body has been fully closed which result in request state not
127
- being fully reset before the next request
93
+ * Fix `domain: :all` for two letter TLD
128
94
 
129
- [CVE-2022-23633]
95
+ This fixes a compatibility issue introduced in our previous security
96
+ release when using `domain: :all` with a two letter but single level top
97
+ level domain domain (like `.ca`, rather than `.co.uk`).
130
98
 
131
99
 
132
- ## Rails 6.1.4.4 (December 15, 2021) ##
100
+ ## Rails 7.0.4.1 (January 17, 2023) ##
133
101
 
134
- * Fix issue with host protection not allowing host with port in development.
102
+ * Fix sec issue with _url_host_allowed?
135
103
 
104
+ Disallow certain strings from `_url_host_allowed?` to avoid a redirect
105
+ to malicious sites.
136
106
 
137
- ## Rails 6.1.4.3 (December 14, 2021) ##
107
+ [CVE-2023-22797]
138
108
 
139
- * Fix issue with host protection not allowing localhost in development.
109
+ * Avoid regex backtracking on If-None-Match header
140
110
 
111
+ [CVE-2023-22795]
141
112
 
142
- ## Rails 6.1.4.2 (December 14, 2021) ##
113
+ * Use string#split instead of regex for domain parts
143
114
 
144
- * Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
115
+ [CVE-2023-22792]
145
116
 
146
- ## Rails 6.1.4.1 (August 19, 2021) ##
117
+ ## Rails 7.0.4 (September 09, 2022) ##
147
118
 
148
- * [CVE-2021-22942] Fix possible open redirect in Host Authorization middleware.
119
+ * Prevent `ActionDispatch::ServerTiming` from overwriting existing values in `Server-Timing`.
149
120
 
150
- Specially crafted "X-Forwarded-Host" headers in combination with certain
151
- "allowed host" formats can cause the Host Authorization middleware in Action
152
- Pack to redirect users to a malicious website.
121
+ Previously, if another middleware down the chain set `Server-Timing` header,
122
+ it would overwritten by `ActionDispatch::ServerTiming`.
153
123
 
154
- ## Rails 6.1.4 (June 24, 2021) ##
124
+ *Jakub Malinowski*
155
125
 
156
- * Ignore file fixtures on `db:fixtures:load`
157
126
 
158
- *Kevin Sjöberg*
127
+ ## Rails 7.0.3.1 (July 12, 2022) ##
159
128
 
160
- * Fix ActionController::Live controller test deadlocks by removing the body buffer size limit for tests.
129
+ * No changes.
161
130
 
162
- *Dylan Thacker-Smith*
163
131
 
164
- * Correctly place optional path parameter booleans.
132
+ ## Rails 7.0.3 (May 09, 2022) ##
165
133
 
166
- Previously, if you specify a url parameter that is part of the path as false it would include that part
167
- of the path as parameter for example:
134
+ * Allow relative redirects when `raise_on_open_redirects` is enabled.
168
135
 
169
- ```
170
- get "(/optional/:optional_id)/things" => "foo#foo", as: :things
171
- things_path(optional_id: false) # => /things?optional_id=false
172
- ```
136
+ *Tom Hughes*
173
137
 
174
- After this change, true and false will be treated the same when used as optional path parameters. Meaning now:
138
+ * Fix `authenticate_with_http_basic` to allow for missing password.
175
139
 
176
- ```
177
- get '(this/:my_bool)/that' as: :that
140
+ Before Rails 7.0 it was possible to handle basic authentication with only a username.
178
141
 
179
- that_path(my_bool: true) # => `/this/true/that`
180
- that_path(my_bool: false) # => `/this/false/that`
142
+ ```ruby
143
+ authenticate_with_http_basic do |token, _|
144
+ ApiClient.authenticate(token)
145
+ end
181
146
  ```
182
147
 
183
- *Adam Hess*
148
+ This ability is restored.
184
149
 
185
- * Add support for 'private, no-store' Cache-Control headers.
150
+ *Jean Boussier*
186
151
 
187
- Previously, 'no-store' was exclusive; no other directives could be specified.
152
+ * Fix `content_security_policy` returning invalid directives.
188
153
 
189
- *Alex Smith*
154
+ Directives such as `self`, `unsafe-eval` and few others were not
155
+ single quoted when the directive was the result of calling a lambda
156
+ returning an array.
190
157
 
158
+ ```ruby
159
+ content_security_policy do |policy|
160
+ policy.frame_ancestors lambda { [:self, "https://example.com"] }
161
+ end
162
+ ```
191
163
 
192
- ## Rails 6.1.3.2 (May 05, 2021) ##
164
+ With this fix the policy generated from above will now be valid.
193
165
 
194
- * Prevent open redirects by correctly escaping the host allow list
195
- CVE-2021-22903
166
+ *Edouard Chin*
196
167
 
197
- * Prevent catastrophic backtracking during mime parsing
198
- CVE-2021-22902
168
+ * Fix `skip_forgery_protection` to run without raising an error if forgery
169
+ protection has not been enabled / `verify_authenticity_token` is not a
170
+ defined callback.
199
171
 
200
- * Prevent regex DoS in HTTP token authentication
201
- CVE-2021-22904
172
+ This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
173
+ `ArgumentError` if `default_protect_from_forgery` is false.
202
174
 
203
- * Prevent string polymorphic route arguments.
175
+ *Brad Trick*
204
176
 
205
- `url_for` supports building polymorphic URLs via an array
206
- of arguments (usually symbols and records). If a developer passes a
207
- user input array, strings can result in unwanted route helper calls.
177
+ * Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
208
178
 
209
- CVE-2021-22885
179
+ Since its inception `ActionController::Live` has been copying thread local variables
180
+ to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
210
181
 
211
- *Gannon McGibbon*
182
+ With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
183
+ `ActionController::Live` controllers.
212
184
 
213
- ## Rails 6.1.3.1 (March 26, 2021) ##
185
+ *Jean Boussier*
214
186
 
215
- * No changes.
187
+ * Fix setting `trailing_slash: true` in route definition.
216
188
 
189
+ ```ruby
190
+ get '/test' => "test#index", as: :test, trailing_slash: true
217
191
 
218
- ## Rails 6.1.3 (February 17, 2021) ##
192
+ test_path() # => "/test/"
193
+ ```
219
194
 
220
- * Re-define routes when not set correctly via inheritance.
195
+ *Jean Boussier*
221
196
 
222
- *John Hawthorn*
197
+ ## Rails 7.0.2.4 (April 26, 2022) ##
223
198
 
199
+ * Allow Content Security Policy DSL to generate for API responses.
224
200
 
225
- ## Rails 6.1.2.1 (February 10, 2021) ##
201
+ *Tim Wade*
226
202
 
227
- * Prevent open redirect when allowed host starts with a dot
203
+ ## Rails 7.0.2.3 (March 08, 2022) ##
228
204
 
229
- [CVE-2021-22881]
205
+ * No changes.
230
206
 
231
- Thanks to @tktech (https://hackerone.com/tktech) for reporting this
232
- issue and the patch!
233
207
 
234
- *Aaron Patterson*
208
+ ## Rails 7.0.2.2 (February 11, 2022) ##
235
209
 
210
+ * No changes.
236
211
 
237
- ## Rails 6.1.2 (February 09, 2021) ##
238
212
 
239
- * Fix error in `ActionController::LogSubscriber` that would happen when throwing inside a controller action.
213
+ ## Rails 7.0.2.1 (February 11, 2022) ##
240
214
 
241
- *Janko Marohnić*
215
+ * Under certain circumstances, the middleware isn't informed that the
216
+ response body has been fully closed which result in request state not
217
+ being fully reset before the next request
242
218
 
243
- * Fix `fixture_file_upload` deprecation when `file_fixture_path` is a relative path.
219
+ [CVE-2022-23633]
244
220
 
245
- *Eugene Kenny*
246
221
 
222
+ ## Rails 7.0.2 (February 08, 2022) ##
247
223
 
248
- ## Rails 6.1.1 (January 07, 2021) ##
224
+ * No changes.
249
225
 
250
- * Fix nil translation key lookup in controllers/
251
226
 
252
- *Jan Klimo*
227
+ ## Rails 7.0.1 (January 06, 2022) ##
253
228
 
254
- * Quietly handle unknown HTTP methods in Action Dispatch SSL middleware.
229
+ * Fix `ActionController::Parameters` methods to keep the original logger context when creating a new copy
230
+ of the original object.
255
231
 
256
- *Alex Robbin*
232
+ *Yutaka Kamei*
257
233
 
258
- * Change the request method to a `GET` when passing failed requests down to `config.exceptions_app`.
259
234
 
260
- *Alex Robbin*
235
+ ## Rails 7.0.0 (December 15, 2021) ##
261
236
 
237
+ * Deprecate `Rails.application.config.action_controller.urlsafe_csrf_tokens`. This config is now always enabled.
262
238
 
263
- ## Rails 6.1.0 (December 09, 2020) ##
239
+ *Étienne Barrié*
264
240
 
265
- * Support for the HTTP header `Feature-Policy` has been revised to reflect
266
- 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).
241
+ * Instance variables set in requests in a `ActionController::TestCase` are now cleared before the next request
267
242
 
268
- ```ruby
269
- Rails.application.config.permissions_policy do |p|
270
- p.camera :none
271
- p.gyroscope :none
272
- p.microphone :none
273
- p.usb :none
274
- p.fullscreen :self
275
- p.payment :self, "https://secure-example.com"
276
- end
277
- ```
243
+ This means if you make multiple requests in the same test, instance variables set in the first request will
244
+ not persist into the second one. (It's not recommended to make multiple requests in the same test.)
278
245
 
279
- *Julien Grillot*
246
+ *Alex Ghiculescu*
280
247
 
281
- * Allow `ActionDispatch::HostAuthorization` to exclude specific requests.
282
248
 
283
- 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.
249
+ ## Rails 7.0.0.rc3 (December 14, 2021) ##
284
250
 
285
- *Chris Bisnett*
251
+ * No changes.
286
252
 
287
- * Add `config.action_dispatch.request_id_header` to allow changing the name of
288
- the unique X-Request-Id header
289
253
 
290
- *Arlston Fernandes*
254
+ ## Rails 7.0.0.rc2 (December 14, 2021) ##
291
255
 
292
- * Deprecate `config.action_dispatch.return_only_media_type_on_content_type`.
256
+ * Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
293
257
 
294
- *Rafael Mendonça França*
295
258
 
296
- * Change `ActionDispatch::Response#content_type` to return the full Content-Type header.
259
+ ## Rails 7.0.0.rc1 (December 06, 2021) ##
297
260
 
298
- *Rafael Mendonça França*
261
+ * `Rails.application.executor` hooks can now be called around every request in a `ActionController::TestCase`
299
262
 
300
- * Remove deprecated `ActionDispatch::Http::ParameterFilter`.
263
+ This helps to better simulate request or job local state being reset between requests and prevent state
264
+ leaking from one request to another.
301
265
 
302
- *Rafael Mendonça França*
266
+ To enable this, set `config.active_support.executor_around_test_case = true` (this is the default in Rails 7).
303
267
 
304
- * Added support for exclusive no-store Cache-Control header.
268
+ *Alex Ghiculescu*
305
269
 
306
- If `no-store` is set on Cache-Control header it is exclusive (all other cache directives are dropped).
270
+ * Consider onion services secure for cookies.
307
271
 
308
- *Chris Kruger*
272
+ *Justin Tracey*
309
273
 
310
- * Catch invalid UTF-8 parameters for POST requests and respond with BadRequest.
274
+ * Remove deprecated `Rails.config.action_view.raise_on_missing_translations`.
311
275
 
312
- Additionally, perform `#set_binary_encoding` in `ActionDispatch::Http::Request#GET` and
313
- `ActionDispatch::Http::Request#POST` prior to validating encoding.
276
+ *Rafael Mendonça França*
314
277
 
315
- *Adrianna Chang*
278
+ * Remove deprecated support to passing a path to `fixture_file_upload` relative to `fixture_path`.
316
279
 
317
- * Allow `assert_recognizes` routing assertions to work on mounted root routes.
280
+ *Rafael Mendonça França*
318
281
 
319
- *Gannon McGibbon*
282
+ * Remove deprecated `ActionDispatch::SystemTestCase#host!`.
320
283
 
321
- * Change default redirection status code for non-GET/HEAD requests to 308 Permanent Redirect for `ActionDispatch::SSL`.
284
+ *Rafael Mendonça França*
322
285
 
323
- *Alan Tan*, *Oz Ben-David*
286
+ * Remove deprecated `Rails.config.action_dispatch.hosts_response_app`.
324
287
 
325
- * Fix `follow_redirect!` to follow redirection with same HTTP verb when following
326
- a 308 redirection.
288
+ *Rafael Mendonça França*
327
289
 
328
- *Alan Tan*
290
+ * Remove deprecated `ActionDispatch::Response.return_only_media_type_on_content_type`.
329
291
 
330
- * When multiple domains are specified for a cookie, a domain will now be
331
- chosen only if it is equal to or is a superdomain of the request host.
292
+ *Rafael Mendonça França*
332
293
 
333
- *Jonathan Hefner*
294
+ * Raise `ActionController::Redirecting::UnsafeRedirectError` for unsafe `redirect_to` redirects.
334
295
 
335
- * `ActionDispatch::Static` handles precompiled Brotli (.br) files.
296
+ This allows `rescue_from` to be used to add a default fallback route:
336
297
 
337
- Adds to existing support for precompiled gzip (.gz) files.
338
- Brotli files are preferred due to much better compression.
298
+ ```ruby
299
+ rescue_from ActionController::Redirecting::UnsafeRedirectError do
300
+ redirect_to root_url
301
+ end
302
+ ```
339
303
 
340
- When the browser requests /some.js with `Accept-Encoding: br`,
341
- we check for public/some.js.br and serve that file, if present, with
342
- `Content-Encoding: br` and `Vary: Accept-Encoding` headers.
304
+ *Kasper Timm Hansen*, *Chris Oliver*
343
305
 
344
- *Ryan Edward Hall*, *Jeremy Daer*
306
+ * Add `url_from` to verify a redirect location is internal.
345
307
 
346
- * Add raise_on_missing_translations support for controllers.
308
+ Takes the open redirect protection from `redirect_to` so users can wrap a
309
+ param, and fall back to an alternate redirect URL when the param provided
310
+ one is unsafe.
347
311
 
348
- This configuration determines whether an error should be raised for missing translations.
349
- It can be enabled through `config.i18n.raise_on_missing_translations`. Note that described
350
- configuration also affects raising error for missing translations in views.
312
+ ```ruby
313
+ def create
314
+ redirect_to url_from(params[:redirect_url]) || root_url
315
+ end
316
+ ```
351
317
 
352
- *fatkodima*
318
+ *dmcge*, *Kasper Timm Hansen*
353
319
 
354
- * Added `compact` and `compact!` to `ActionController::Parameters`.
320
+ * Allow Capybara driver name overrides in `SystemTestCase::driven_by`
355
321
 
356
- *Eugene Kenny*
322
+ Allow users to prevent conflicts among drivers that use the same driver
323
+ type (selenium, poltergeist, webkit, rack test).
357
324
 
358
- * Calling `each_pair` or `each_value` on an `ActionController::Parameters`
359
- without passing a block now returns an enumerator.
325
+ Fixes #42502
360
326
 
361
- *Eugene Kenny*
327
+ *Chris LaRose*
362
328
 
363
- * `fixture_file_upload` now uses path relative to `file_fixture_path`
329
+ * Allow multiline to be passed in routes when using wildcard segments.
364
330
 
365
- Previously the path had to be relative to `fixture_path`.
366
- You can change your existing code as follow:
331
+ Previously routes with newlines weren't detected when using wildcard segments, returning
332
+ a `No route matches` error.
333
+ After this change, routes with newlines are detected on wildcard segments. Example
367
334
 
368
335
  ```ruby
369
- # Before
370
- fixture_file_upload('files/dog.png')
336
+ draw do
337
+ get "/wildcard/*wildcard_segment", to: SimpleApp.new("foo#index"), as: :wildcard
338
+ end
371
339
 
372
- # After
373
- fixture_file_upload('dog.png')
340
+ # After the change, the path matches.
341
+ assert_equal "/wildcard/a%0Anewline", url_helpers.wildcard_path(wildcard_segment: "a\nnewline")
374
342
  ```
375
343
 
376
- *Edouard Chin*
344
+ Fixes #39103
377
345
 
378
- * Remove deprecated `force_ssl` at the controller level.
346
+ *Ignacio Chiazzo*
379
347
 
380
- *Rafael Mendonça França*
348
+ * Treat html suffix in controller translation.
381
349
 
382
- * The +helper+ class method for controllers loads helper modules specified as
383
- strings/symbols with `String#constantize` instead of `require_dependency`.
350
+ *Rui Onodera*, *Gavin Miller*
384
351
 
385
- Remember that support for strings/symbols is only a convenient API. You can
386
- always pass a module object:
352
+ * Allow permitting numeric params.
387
353
 
354
+ Previously it was impossible to permit different fields on numeric parameters.
355
+ After this change you can specify different fields for each numbered parameter.
356
+ For example params like,
388
357
  ```ruby
389
- helper UtilsHelper
358
+ book: {
359
+ authors_attributes: {
360
+ '0': { name: "William Shakespeare", age_of_death: "52" },
361
+ '1': { name: "Unattributed Assistant" },
362
+ '2': "Not a hash",
363
+ 'new_record': { name: "Some name" }
364
+ }
365
+ }
390
366
  ```
391
367
 
392
- which is recommended because it is simple and direct. When a string/symbol
393
- is received, `helper` just manipulates and inflects the argument to obtain
394
- that same module object.
395
-
396
- *Xavier Noria*, *Jean Boussier*
397
-
398
- * Correctly identify the entire localhost IPv4 range as trusted proxy.
368
+ Before you could permit name on each author with,
369
+ `permit book: { authors_attributes: [ :name ] }`
399
370
 
400
- *Nick Soracco*
371
+ After this change you can permit different keys on each numbered element,
372
+ `permit book: { authors_attributes: { '1': [ :name ], '0': [ :name, :age_of_death ] } }`
401
373
 
402
- * `url_for` will now use "https://" as the default protocol when
403
- `Rails.application.config.force_ssl` is set to true.
374
+ Fixes #41625
404
375
 
405
- *Jonathan Hefner*
406
-
407
- * Accept and default to base64_urlsafe CSRF tokens.
376
+ *Adam Hess*
408
377
 
409
- Base64 strict-encoded CSRF tokens are not inherently websafe, which makes
410
- them difficult to deal with. For example, the common practice of sending
411
- the CSRF token to a browser in a client-readable cookie does not work properly
412
- out of the box: the value has to be url-encoded and decoded to survive transport.
378
+ * Update `HostAuthorization` middleware to render debug info only
379
+ when `config.consider_all_requests_local` is set to true.
413
380
 
414
- Now, we generate Base64 urlsafe-encoded CSRF tokens, which are inherently safe
415
- to transport. Validation accepts both urlsafe tokens, and strict-encoded tokens
416
- for backwards compatibility.
381
+ Also, blocked host info is always logged with level `error`.
417
382
 
418
- *Scott Blum*
383
+ Fixes #42813
419
384
 
420
- * Support rolling deploys for cookie serialization/encryption changes.
385
+ *Nikita Vyrko*
421
386
 
422
- In a distributed configuration like rolling update, users may observe
423
- both old and new instances during deployment. Users may be served by a
424
- new instance and then by an old instance.
387
+ * Add Server-Timing middleware
425
388
 
426
- That means when the server changes `cookies_serializer` from `:marshal`
427
- to `:hybrid` or the server changes `use_authenticated_cookie_encryption`
428
- from `false` to `true`, users may lose their sessions if they access the
429
- server during deployment.
389
+ Server-Timing specification defines how the server can communicate to browsers performance metrics
390
+ about the request it is responding to.
430
391
 
431
- We added fallbacks to downgrade the cookie format when necessary during
432
- deployment, ensuring compatibility on both old and new instances.
392
+ The ServerTiming middleware is enabled by default on `development` environment by default using the
393
+ `config.server_timing` setting and set the relevant duration metrics in the `Server-Timing` header
433
394
 
434
- *Masaki Hara*
395
+ The full specification for Server-Timing header can be found in: https://www.w3.org/TR/server-timing/#dfn-server-timing-header-field
435
396
 
436
- * `ActionDispatch::Request.remote_ip` has ip address even when all sites are trusted.
397
+ *Sebastian Sogamoso*, *Guillermo Iguaran*
437
398
 
438
- Before, if all `X-Forwarded-For` sites were trusted, the `remote_ip` would default to `127.0.0.1`.
439
- Now, the furthest proxy site is used. e.g.: It now gives an ip address when using curl from the load balancer.
440
399
 
441
- *Keenan Brock*
400
+ ## Rails 7.0.0.alpha2 (September 15, 2021) ##
442
401
 
443
- * Fix possible information leak / session hijacking vulnerability.
402
+ * No changes.
444
403
 
445
- The `ActionDispatch::Session::MemcacheStore` is still vulnerable given it requires the
446
- gem dalli to be updated as well.
447
404
 
448
- CVE-2019-16782.
405
+ ## Rails 7.0.0.alpha1 (September 15, 2021) ##
449
406
 
450
- * Include child session assertion count in ActionDispatch::IntegrationTest.
407
+ * Use a static error message when raising `ActionDispatch::Http::Parameters::ParseError`
408
+ to avoid inadvertently logging the HTTP request body at the `fatal` level when it contains
409
+ malformed JSON.
451
410
 
452
- `IntegrationTest#open_session` uses `dup` to create the new session, which
453
- meant it had its own copy of `@assertions`. This prevented the assertions
454
- from being correctly counted and reported.
411
+ Fixes #41145
455
412
 
456
- Child sessions now have their `attr_accessor` overridden to delegate to the
457
- root session.
413
+ *Aaron Lahey*
458
414
 
459
- Fixes #32142.
415
+ * Add `Middleware#delete!` to delete middleware or raise if not found.
460
416
 
461
- *Sam Bostock*
417
+ `Middleware#delete!` works just like `Middleware#delete` but will
418
+ raise an error if the middleware isn't found.
462
419
 
463
- * Add SameSite protection to every written cookie.
420
+ *Alex Ghiculescu*, *Petrik de Heus*, *Junichi Sato*
464
421
 
465
- Enabling `SameSite` cookie protection is an addition to CSRF protection,
466
- where cookies won't be sent by browsers in cross-site POST requests when set to `:lax`.
422
+ * Raise error on unpermitted open redirects.
467
423
 
468
- `:strict` disables cookies being sent in cross-site GET or POST requests.
424
+ Add `allow_other_host` options to `redirect_to`.
425
+ Opt in to this behaviour with `ActionController::Base.raise_on_open_redirects = true`.
469
426
 
470
- Passing `:none` disables this protection and is the same as previous versions albeit a `; SameSite=None` is appended to the cookie.
427
+ *Gannon McGibbon*
471
428
 
472
- See upgrade instructions in config/initializers/new_framework_defaults_6_1.rb.
429
+ * Deprecate `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing (they will be removed in Rails 7.1). Add `cuprite` instead.
473
430
 
474
- More info [here](https://tools.ietf.org/html/draft-west-first-party-cookies-07)
431
+ [Poltergeist](https://github.com/teampoltergeist/poltergeist) and [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) are already not maintained. These usage in Rails are removed for avoiding confusing users.
475
432
 
476
- _NB: Technically already possible as Rack supports SameSite protection, this is to ensure it's applied to all cookies_
433
+ [Cuprite](https://github.com/rubycdp/cuprite) is a good alternative to Poltergeist. Some guide descriptions are replaced from Poltergeist to Cuprite.
477
434
 
478
- *Cédric Fabianski*
435
+ *Yusuke Iwaki*
479
436
 
480
- * Bring back the feature that allows loading external route files from the router.
437
+ * Exclude additional flash types from `ActionController::Base.action_methods`.
481
438
 
482
- This feature existed back in 2012 but got reverted with the incentive that
483
- https://github.com/rails/routing_concerns was a better approach. Turned out
484
- that this wasn't fully the case and loading external route files from the router
485
- can be helpful for applications with a really large set of routes.
486
- Without this feature, application needs to implement routes reloading
487
- themselves and it's not straightforward.
439
+ Ensures that additional flash types defined on ActionController::Base subclasses
440
+ are not listed as actions on that controller.
488
441
 
489
- ```ruby
490
- # config/routes.rb
442
+ class MyController < ApplicationController
443
+ add_flash_types :hype
444
+ end
491
445
 
492
- Rails.application.routes.draw do
493
- draw(:admin)
494
- end
446
+ MyController.action_methods.include?('hype') # => false
495
447
 
496
- # config/routes/admin.rb
448
+ *Gavin Morrice*
497
449
 
498
- get :foo, to: 'foo#bar'
499
- ```
450
+ * OpenSSL constants are now used for Digest computations.
500
451
 
501
- *Yehuda Katz*, *Edouard Chin*
452
+ *Dirkjan Bussink*
502
453
 
503
- * Fix system test driver option initialization for non-headless browsers.
454
+ * Remove IE6-7-8 file download related hack/fix from ActionController::DataStreaming module.
504
455
 
505
- *glaszig*
456
+ Due to the age of those versions of IE this fix is no longer relevant, more importantly it creates an edge-case for unexpected Cache-Control headers.
506
457
 
507
- * `redirect_to.action_controller` notifications now include the `ActionDispatch::Request` in
508
- their payloads as `:request`.
458
+ *Tadas Sasnauskas*
509
459
 
510
- *Austin Story*
460
+ * Configuration setting to skip logging an uncaught exception backtrace when the exception is
461
+ present in `rescued_responses`.
511
462
 
512
- * `respond_to#any` no longer returns a response's Content-Type based on the
513
- request format but based on the block given.
463
+ It may be too noisy to get all backtraces logged for applications that manage uncaught
464
+ exceptions via `rescued_responses` and `exceptions_app`.
465
+ `config.action_dispatch.log_rescued_responses` (defaults to `true`) can be set to `false` in
466
+ this case, so that only exceptions not found in `rescued_responses` will be logged.
514
467
 
515
- Example:
468
+ *Alexander Azarov*, *Mike Dalessio*
516
469
 
517
- ```ruby
518
- def my_action
519
- respond_to do |format|
520
- format.any { render(json: { foo: 'bar' }) }
521
- end
522
- end
470
+ * Ignore file fixtures on `db:fixtures:load`.
523
471
 
524
- get('my_action.csv')
525
- ```
472
+ *Kevin Sjöberg*
526
473
 
527
- The previous behaviour was to respond with a `text/csv` Content-Type which
528
- is inaccurate since a JSON response is being rendered.
474
+ * Fix ActionController::Live controller test deadlocks by removing the body buffer size limit for tests.
529
475
 
530
- Now it correctly returns a `application/json` Content-Type.
476
+ *Dylan Thacker-Smith*
531
477
 
532
- *Edouard Chin*
478
+ * New `ActionController::ConditionalGet#no_store` method to set HTTP cache control `no-store` directive.
533
479
 
534
- * Replaces (back)slashes in failure screenshot image paths with dashes.
480
+ *Tadas Sasnauskas*
535
481
 
536
- If a failed test case contained a slash or a backslash, a screenshot would be created in a
537
- nested directory, causing issues with `tmp:clear`.
482
+ * Drop support for the `SERVER_ADDR` header.
538
483
 
539
- *Damir Zekic*
484
+ Following up https://github.com/rack/rack/pull/1573 and https://github.com/rails/rails/pull/42349.
540
485
 
541
- * Add `params.member?` to mimic Hash behavior.
486
+ *Ricardo Díaz*
542
487
 
543
- *Younes Serraj*
488
+ * Set session options when initializing a basic session.
544
489
 
545
- * `process_action.action_controller` notifications now include the following in their payloads:
490
+ *Gannon McGibbon*
546
491
 
547
- * `:request` - the `ActionDispatch::Request`
548
- * `:response` - the `ActionDispatch::Response`
492
+ * Add `cache_control: {}` option to `fresh_when` and `stale?`.
549
493
 
550
- *George Claghorn*
494
+ Works as a shortcut to set `response.cache_control` with the above methods.
551
495
 
552
- * Updated `ActionDispatch::Request.remote_ip` setter to clear set the instance
553
- `remote_ip` to `nil` before setting the header that the value is derived
554
- from.
496
+ *Jacopo Beschi*
555
497
 
556
- Fixes #37383.
498
+ * Writing into a disabled session will now raise an error.
557
499
 
558
- *Norm Provost*
500
+ Previously when no session store was set, writing into the session would silently fail.
559
501
 
560
- * `ActionController::Base.log_at` allows setting a different log level per request.
502
+ *Jean Boussier*
561
503
 
562
- ```ruby
563
- # Use the debug level if a particular cookie is set.
564
- class ApplicationController < ActionController::Base
565
- log_at :debug, if: -> { cookies[:debug] }
566
- end
567
- ```
504
+ * Add support for 'require-trusted-types-for' and 'trusted-types' headers.
568
505
 
569
- *George Claghorn*
506
+ Fixes #42034.
570
507
 
571
- * Allow system test screen shots to be taken more than once in
572
- a test by prefixing the file name with an incrementing counter.
508
+ *lfalcao*
573
509
 
574
- Add an environment variable `RAILS_SYSTEM_TESTING_SCREENSHOT_HTML` to
575
- enable saving of HTML during a screenshot in addition to the image.
576
- This uses the same image name, with the extension replaced with `.html`
510
+ * Remove inline styles and address basic accessibility issues on rescue templates.
577
511
 
578
- *Tom Fakes*
512
+ *Jacob Herrington*
579
513
 
580
- * Add `Vary: Accept` header when using `Accept` header for response.
514
+ * Add support for 'private, no-store' Cache-Control headers.
581
515
 
582
- For some requests like `/users/1`, Rails uses requests' `Accept`
583
- header to determine what to return. And if we don't add `Vary`
584
- in the response header, browsers might accidentally cache different
585
- types of content, which would cause issues: e.g. javascript got displayed
586
- instead of html content. This PR fixes these issues by adding `Vary: Accept`
587
- in these types of requests. For more detailed problem description, please read:
516
+ Previously, 'no-store' was exclusive; no other directives could be specified.
588
517
 
589
- https://github.com/rails/rails/pull/36213
518
+ *Alex Smith*
590
519
 
591
- Fixes #25842.
520
+ * Expand payload of `unpermitted_parameters.action_controller` instrumentation to allow subscribers to
521
+ know which controller action received unpermitted parameters.
592
522
 
593
- *Stan Lo*
523
+ *bbuchalter*
594
524
 
595
- * Fix IntegrationTest `follow_redirect!` to follow redirection using the same HTTP verb when following
596
- a 307 redirection.
525
+ * Add `ActionController::Live#send_stream` that makes it more convenient to send generated streams:
597
526
 
598
- *Edouard Chin*
527
+ ```ruby
528
+ send_stream(filename: "subscribers.csv") do |stream|
529
+ stream.writeln "email_address,updated_at"
599
530
 
600
- * System tests require Capybara 3.26 or newer.
531
+ @subscribers.find_each do |subscriber|
532
+ stream.writeln [ subscriber.email_address, subscriber.updated_at ].join(",")
533
+ end
534
+ end
535
+ ```
601
536
 
602
- *George Claghorn*
537
+ *DHH*
603
538
 
604
- * Reduced log noise handling ActionController::RoutingErrors.
539
+ * Add `ActionController::Live::Buffer#writeln` to write a line to the stream with a newline included.
605
540
 
606
- *Alberto Fernández-Capel*
541
+ *DHH*
607
542
 
608
- * Add DSL for configuring HTTP Feature Policy.
543
+ * `ActionDispatch::Request#content_type` now returned Content-Type header as it is.
609
544
 
610
- This new DSL provides a way to configure an HTTP Feature Policy at a
611
- global or per-controller level. Full details of HTTP Feature Policy
612
- specification and guidelines can be found at MDN:
545
+ Previously, `ActionDispatch::Request#content_type` returned value does NOT contain charset part.
546
+ This behavior changed to returned Content-Type header containing charset part as it is.
613
547
 
614
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
548
+ If you want just MIME type, please use `ActionDispatch::Request#media_type` instead.
615
549
 
616
- Example global policy:
550
+ Before:
617
551
 
618
552
  ```ruby
619
- Rails.application.config.feature_policy do |f|
620
- f.camera :none
621
- f.gyroscope :none
622
- f.microphone :none
623
- f.usb :none
624
- f.fullscreen :self
625
- f.payment :self, "https://secure.example.com"
626
- end
553
+ request = ActionDispatch::Request.new("CONTENT_TYPE" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
554
+ request.content_type #=> "text/csv"
627
555
  ```
628
556
 
629
- Example controller level policy:
557
+ After:
630
558
 
631
559
  ```ruby
632
- class PagesController < ApplicationController
633
- feature_policy do |p|
634
- p.geolocation "https://example.com"
635
- end
636
- end
560
+ request = ActionDispatch::Request.new("Content-Type" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
561
+ request.content_type #=> "text/csv; header=present; charset=utf-16"
562
+ request.media_type #=> "text/csv"
637
563
  ```
638
564
 
639
- *Jacob Bednarz*
565
+ *Rafael Mendonça França*
640
566
 
641
- * Add the ability to set the CSP nonce only to the specified directives.
567
+ * Change `ActionDispatch::Request#media_type` to return `nil` when the request don't have a `Content-Type` header.
642
568
 
643
- Fixes #35137.
569
+ *Rafael Mendonça França*
644
570
 
645
- *Yuji Yaginuma*
571
+ * Fix error in `ActionController::LogSubscriber` that would happen when throwing inside a controller action.
646
572
 
647
- * Keep part when scope option has value.
573
+ *Janko Marohnić*
648
574
 
649
- When a route was defined within an optional scope, if that route didn't
650
- take parameters the scope was lost when using path helpers. This commit
651
- ensures scope is kept both when the route takes parameters or when it
652
- doesn't.
575
+ * Allow anything with `#to_str` (like `Addressable::URI`) as a `redirect_to` location.
653
576
 
654
- Fixes #33219.
577
+ *ojab*
655
578
 
656
- *Alberto Almagro*
579
+ * Change the request method to a `GET` when passing failed requests down to `config.exceptions_app`.
657
580
 
658
- * Added `deep_transform_keys` and `deep_transform_keys!` methods to ActionController::Parameters.
581
+ *Alex Robbin*
659
582
 
660
- *Gustavo Gutierrez*
583
+ * Deprecate the ability to assign a single value to `config.action_dispatch.trusted_proxies`
584
+ as `RemoteIp` middleware behaves inconsistently depending on whether this is configured
585
+ with a single value or an enumerable.
661
586
 
662
- * Calling `ActionController::Parameters#transform_keys`/`!` without a block now returns
663
- an enumerator for the parameters instead of the underlying hash.
587
+ Fixes #40772.
664
588
 
665
- *Eugene Kenny*
589
+ *Christian Sutter*
666
590
 
667
- * Fix strong parameters blocks all attributes even when only some keys are invalid (non-numerical).
668
- It should only block invalid key's values instead.
591
+ * Add `redirect_back_or_to(fallback_location, **)` as a more aesthetically pleasing version of `redirect_back fallback_location:, **`.
592
+ The old method name is retained without explicit deprecation.
669
593
 
670
- *Stan Lo*
594
+ *DHH*
671
595
 
672
596
 
673
- Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actionpack/CHANGELOG.md) for previous changes.
597
+ Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/actionpack/CHANGELOG.md) for previous changes.