rack 3.0.5 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rack might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +383 -1
- data/CONTRIBUTING.md +11 -9
- data/README.md +95 -28
- data/SPEC.rdoc +206 -288
- data/lib/rack/auth/abstract/request.rb +2 -0
- data/lib/rack/auth/basic.rb +1 -2
- data/lib/rack/bad_request.rb +8 -0
- data/lib/rack/body_proxy.rb +18 -2
- data/lib/rack/builder.rb +29 -10
- data/lib/rack/cascade.rb +0 -3
- data/lib/rack/common_logger.rb +3 -2
- data/lib/rack/conditional_get.rb +4 -3
- data/lib/rack/constants.rb +3 -1
- data/lib/rack/etag.rb +3 -0
- data/lib/rack/head.rb +2 -3
- data/lib/rack/headers.rb +86 -2
- data/lib/rack/lint.rb +482 -425
- data/lib/rack/media_type.rb +18 -9
- data/lib/rack/mime.rb +6 -5
- data/lib/rack/mock_request.rb +10 -15
- data/lib/rack/mock_response.rb +39 -18
- data/lib/rack/multipart/parser.rb +169 -73
- data/lib/rack/multipart/uploaded_file.rb +42 -5
- data/lib/rack/multipart.rb +9 -1
- data/lib/rack/query_parser.rb +86 -97
- data/lib/rack/request.rb +67 -100
- data/lib/rack/response.rb +29 -19
- data/lib/rack/rewindable_input.rb +4 -1
- data/lib/rack/sendfile.rb +2 -2
- data/lib/rack/show_exceptions.rb +10 -4
- data/lib/rack/show_status.rb +0 -2
- data/lib/rack/static.rb +2 -1
- data/lib/rack/utils.rb +78 -110
- data/lib/rack/version.rb +3 -20
- data/lib/rack.rb +11 -17
- metadata +6 -15
- data/lib/rack/auth/digest/md5.rb +0 -1
- data/lib/rack/auth/digest/nonce.rb +0 -1
- data/lib/rack/auth/digest/params.rb +0 -1
- data/lib/rack/auth/digest/request.rb +0 -1
- data/lib/rack/auth/digest.rb +0 -256
- data/lib/rack/chunked.rb +0 -120
- data/lib/rack/file.rb +0 -9
- data/lib/rack/logger.rb +0 -22
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 17b6834d4c6a07c5cf23757814f450f39e32589ef0a6300310c7ab111a8c99c2
|
|
4
|
+
data.tar.gz: db3d1475837e3d45082994af134b5ceb9e0b83f400244c33262c343f421798f0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 36b2bb65194e71b496e946090552bc97f3367426d4c169b0da384ee284068dd809d9d89fc585a49caa313a48e73eea3ce4f1dd47f2a5f103da9ac006f9f6d12a
|
|
7
|
+
data.tar.gz: 934940c91b89ebcf4a3015d3876e850f470d97ac82e189a390ff07efed1664d153a28546f8576fa99d6e6361f168ab1c6ffd8541509ddfe709436bd649cca29d
|
data/CHANGELOG.md
CHANGED
|
@@ -2,12 +2,302 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. For info on how to format all future additions to this file please reference [Keep A Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Unreleased
|
|
6
|
+
|
|
7
|
+
## [3.2.0] - 2025-07-31
|
|
8
|
+
|
|
9
|
+
This release continues Rack's evolution toward a cleaner, more efficient foundation while maintaining backward compatibility for most applications. The breaking changes primarily affect deprecated functionality, so most users should experience a smooth upgrade with improved performance and standards compliance.
|
|
10
|
+
|
|
11
|
+
### SPEC Changes
|
|
12
|
+
|
|
13
|
+
- Request environment keys must now be strings. ([#2310](https://github.com/rack/rack/issues/2310), [@jeremyevans])
|
|
14
|
+
- Add `nil` as a valid return from a Response `body.to_path` ([#2318](https://github.com/rack/rack/pull/2318), [@MSP-Greg])
|
|
15
|
+
- `Rack::Lint#check_header_value` is relaxed, only disallowing CR/LF/NUL characters. ([#2354](https://github.com/rack/rack/pull/2354), [@ioquatix])
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Introduce `Rack::VERSION` constant. ([#2199](https://github.com/rack/rack/pull/2199), [@ioquatix])
|
|
20
|
+
- `ISO-2022-JP` encoded parts within MIME Multipart sections of an HTTP request body will now be converted to `UTF-8`. ([#2245](https://github.com/rack/rack/pull/2245), [@nappa](https://github.com/nappa))
|
|
21
|
+
- Add `Rack::Request#query_parser=` to allow setting the query parser to use. ([#2349](https://github.com/rack/rack/pull/2349), [@jeremyevans])
|
|
22
|
+
- Add `Rack::Request#form_pairs` to access form data as raw key-value pairs, preserving duplicate keys. ([#2351](https://github.com/rack/rack/pull/2351), [@matthewd])
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- Invalid cookie keys will now raise an error. ([#2193](https://github.com/rack/rack/pull/2193), [@ioquatix])
|
|
27
|
+
- `Rack::MediaType#params` now handles empty strings. ([#2229](https://github.com/rack/rack/pull/2229), [@jeremyevans])
|
|
28
|
+
- Avoid unnecessary calls to the `ip_filter` lambda to evaluate `Request#ip` ([#2287](https://github.com/rack/rack/pull/2287), [@willbryant])
|
|
29
|
+
- Only calculate `Request#ip` once per request ([#2292](https://github.com/rack/rack/pull/2292), [@willbryant])
|
|
30
|
+
- `Rack::Builder` `#use`, `#map`, and `#run` methods now return `nil`. ([#2355](https://github.com/rack/rack/pull/2355), [@ioquatix])
|
|
31
|
+
- Directly close the body in `Rack::ConditionalGet` when the response is `304 Not Modified`. ([#2353](https://github.com/rack/rack/pull/2353), [@ioquatix])
|
|
32
|
+
- Directly close the body in `Rack::Head` when the request method is `HEAD`([#2360](https://github.com/rack/rack/pull/2360), [@skipkayhil](https://github.com/skipkayhil))
|
|
33
|
+
|
|
34
|
+
### Deprecated
|
|
35
|
+
|
|
36
|
+
- `Rack::Auth::AbstractRequest#request` is deprecated without replacement. ([#2229](https://github.com/rack/rack/pull/2229), [@jeremyevans])
|
|
37
|
+
- `Rack::Request#parse_multipart` (private method designed to be overridden in subclasses) is deprecated without replacement. ([#2229](https://github.com/rack/rack/pull/2229), [@jeremyevans])
|
|
38
|
+
|
|
39
|
+
### Removed
|
|
40
|
+
|
|
41
|
+
- `Rack::Request#values_at` is removed. ([#2200](https://github.com/rack/rack/pull/2200), [@ioquatix])
|
|
42
|
+
- `Rack::Logger` is removed with no replacement. ([#2196](https://github.com/rack/rack/pull/2196), [@ioquatix])
|
|
43
|
+
- Automatic cache invalidation in `Rack::Request#{GET,POST}` has been removed. ([#2230](https://github.com/rack/rack/pull/2230), [@jeremyevans])
|
|
44
|
+
- Support for `CGI::Cookie` has been removed. ([#2332](https://github.com/rack/rack/pull/2332), [@ioquatix])
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- `Rack::RewindableInput::Middleware` no longer wraps a nil input. ([#2259](https://github.com/rack/rack/pull/2259), [@tt](https://github.com/tt))
|
|
49
|
+
- Fix `NoMethodError` in `Rack::Request#wrap_ipv6` when `x-forwarded-host` is empty. ([#2270](https://github.com/rack/rack/pull/2270), [@oieioi](https://github.com/oieioi))
|
|
50
|
+
- Fix the specification for `SERVER_PORT` which was incorrectly documented as required to be an `Integer` if present - it must be a `String` containing digits only. ([#2296](https://github.com/rack/rack/pull/2296), [@ioquatix])
|
|
51
|
+
- `SERVER_NAME` and `HTTP_HOST` are now more strictly validated according to the relevant specifications. ([#2298](https://github.com/rack/rack/pull/2298), [@ioquatix])
|
|
52
|
+
- `Rack::Lint` now disallows `PATH_INFO="" SCRIPT_NAME=""`. ([#2298](https://github.com/rack/rack/issues/2307), [@jeremyevans])
|
|
53
|
+
|
|
54
|
+
## [3.1.16] - 2025-06-04
|
|
55
|
+
|
|
56
|
+
### Security
|
|
57
|
+
|
|
58
|
+
- [CVE-2025-49007](https://github.com/advisories/GHSA-47m2-26rw-j2jw) Fix ReDoS in multipart request.
|
|
59
|
+
|
|
60
|
+
## [3.1.15] - 2025-05-18
|
|
61
|
+
|
|
62
|
+
- Optional support for `CGI::Cookie` if not available. ([#2327](https://github.com/rack/rack/pull/2327), [#2333](https://github.com/rack/rack/pull/2333), [@earlopain])
|
|
63
|
+
|
|
64
|
+
## [3.1.14] - 2025-05-06
|
|
65
|
+
|
|
66
|
+
:warning: **This release includes a security fix that may cause certain routes in previously working applications to fail if query parameters exceed 4,096 in count or 4 MB in total size. See <https://github.com/rack/rack/discussions/2356> for more details.**
|
|
67
|
+
|
|
68
|
+
### Security
|
|
69
|
+
|
|
70
|
+
- [CVE-2025-46727](https://github.com/rack/rack/security/advisories/GHSA-gjh7-p2fx-99vx) Unbounded parameter parsing in `Rack::QueryParser` can lead to memory exhaustion.
|
|
71
|
+
|
|
72
|
+
## [3.1.13] - 2025-04-13
|
|
73
|
+
|
|
74
|
+
- Ensure `Rack::ETag` correctly updates response body. ([#2324](https://github.com/rack/rack/pull/2324), [@ioquatix])
|
|
75
|
+
|
|
76
|
+
## [3.1.12] - 2025-03-11
|
|
77
|
+
|
|
78
|
+
### Security
|
|
79
|
+
|
|
80
|
+
- [CVE-2025-27610](https://github.com/rack/rack/security/advisories/GHSA-7wqh-767x-r66v) Local file inclusion in `Rack::Static`.
|
|
81
|
+
|
|
82
|
+
## [3.1.11] - 2025-03-04
|
|
83
|
+
|
|
84
|
+
### Security
|
|
85
|
+
|
|
86
|
+
- [CVE-2025-27111](https://github.com/rack/rack/security/advisories/GHSA-8cgq-6mh2-7j6v) Possible Log Injection in `Rack::Sendfile`.
|
|
87
|
+
|
|
88
|
+
## [3.1.10] - 2025-02-12
|
|
89
|
+
|
|
90
|
+
### Security
|
|
91
|
+
|
|
92
|
+
- [CVE-2025-25184](https://github.com/rack/rack/security/advisories/GHSA-7g2v-jj9q-g3rg) Possible Log Injection in `Rack::CommonLogger`.
|
|
93
|
+
|
|
94
|
+
## [3.1.9] - 2025-01-31
|
|
95
|
+
|
|
96
|
+
### Fixed
|
|
97
|
+
|
|
98
|
+
- `Rack::MediaType#params` now handles parameters without values. ([#2263](https://github.com/rack/rack/pull/2263), [@AllyMarthaJ](https://github.com/AllyMarthaJ))
|
|
99
|
+
|
|
100
|
+
## [3.1.8] - 2024-10-14
|
|
101
|
+
|
|
102
|
+
### Fixed
|
|
103
|
+
|
|
104
|
+
- Resolve deprecation warnings about uri `DEFAULT_PARSER`. ([#2249](https://github.com/rack/rack/pull/2249), [@earlopain])
|
|
105
|
+
|
|
106
|
+
## [3.1.7] - 2024-07-11
|
|
107
|
+
|
|
108
|
+
### Fixed
|
|
109
|
+
|
|
110
|
+
- Do not remove escaped opening/closing quotes for content-disposition filenames. ([#2229](https://github.com/rack/rack/pull/2229), [@jeremyevans])
|
|
111
|
+
- Fix encoding setting for non-binary IO-like objects in MockRequest#env_for. ([#2227](https://github.com/rack/rack/pull/2227), [@jeremyevans])
|
|
112
|
+
- `Rack::Response` should not generate invalid `content-length` header. ([#2219](https://github.com/rack/rack/pull/2219), [@ioquatix])
|
|
113
|
+
- Allow empty PATH_INFO. ([#2214](https://github.com/rack/rack/pull/2214), [@ioquatix])
|
|
114
|
+
|
|
115
|
+
## [3.1.6] - 2024-07-03
|
|
116
|
+
|
|
117
|
+
### Fixed
|
|
118
|
+
|
|
119
|
+
- Fix several edge cases in `Rack::Request#parse_http_accept_header`'s implementation. ([#2226](https://github.com/rack/rack/pull/2226), [@ioquatix])
|
|
120
|
+
|
|
121
|
+
## [3.1.5] - 2024-07-02
|
|
122
|
+
|
|
123
|
+
### Security
|
|
124
|
+
|
|
125
|
+
- Fix potential ReDoS attack in `Rack::Request#parse_http_accept_header`. ([GHSA-cj83-2ww7-mvq7](https://github.com/rack/rack/security/advisories/GHSA-cj83-2ww7-mvq7), [@dwisiswant0](https://github.com/dwisiswant0))
|
|
126
|
+
|
|
127
|
+
## [3.1.4] - 2024-06-22
|
|
128
|
+
|
|
129
|
+
### Fixed
|
|
130
|
+
|
|
131
|
+
- Fix `Rack::Lint` matching some paths incorrectly as authority form. ([#2220](https://github.com/rack/rack/pull/2220), [@ioquatix])
|
|
132
|
+
|
|
133
|
+
## [3.1.3] - 2024-06-12
|
|
134
|
+
|
|
135
|
+
### Fixed
|
|
136
|
+
|
|
137
|
+
- Fix passing non-strings to `Rack::Utils.escape_html`. ([#2202](https://github.com/rack/rack/pull/2202), [@earlopain])
|
|
138
|
+
- `Rack::MockResponse` gracefully handles empty cookies ([#2203](https://github.com/rack/rack/pull/2203) [@wynksaiddestroy])
|
|
139
|
+
|
|
140
|
+
## [3.1.2] - 2024-06-11
|
|
141
|
+
|
|
142
|
+
- `Rack::Response` will take in to consideration chunked encoding responses ([#2204](https://github.com/rack/rack/pull/2204), [@tenderlove])
|
|
143
|
+
|
|
144
|
+
## [3.1.1] - 2024-06-11
|
|
145
|
+
|
|
146
|
+
- Oops! I shouldn't have shipped that
|
|
147
|
+
|
|
148
|
+
## [3.1.0] - 2024-06-11
|
|
149
|
+
|
|
150
|
+
:warning: **This release includes several breaking changes.** Refer to the **Removed** section below for the list of deprecated methods that have been removed in this release.
|
|
151
|
+
|
|
152
|
+
This release is primarily a maintenance release that removes features deprecated in Rack v3.0. Alongside these removals, there are several improvements to the Rack SPEC, mainly focused on enhancing input and output handling. These changes aim to make Rack more efficient and align better with the requirements of server implementations and relevant HTTP specifications.
|
|
153
|
+
|
|
154
|
+
### SPEC Changes
|
|
155
|
+
|
|
156
|
+
- `rack.input` is now optional. ([#1997](https://github.com/rack/rack/pull/1997), [#2018](https://github.com/rack/rack/pull/2018), [@ioquatix])
|
|
157
|
+
- `PATH_INFO` is now validated according to the HTTP/1.1 specification. ([#2117](https://github.com/rack/rack/pull/2117), [#2181](https://github.com/rack/rack/pull/2181), [@ioquatix])
|
|
158
|
+
- `OPTIONS *` is now accepted. ([#2114](https://github.com/rack/rack/pull/2114), [@doriantaylor](https://github.com/doriantaylor))
|
|
159
|
+
- Introduce optional `rack.protocol` request and response header for handling connection upgrades. ([#1954](https://github.com/rack/rack/pull/1954), [@ioquatix])
|
|
160
|
+
|
|
161
|
+
### Added
|
|
162
|
+
|
|
163
|
+
- Introduce `Rack::Multipart::MissingInputError` for improved handling of missing input in `#parse_multipart`. ([#2018](https://github.com/rack/rack/pull/2018), [@ioquatix])
|
|
164
|
+
- Introduce `module Rack::BadRequest` which is included in multipart and query parser errors. ([#2019](https://github.com/rack/rack/pull/2019), [@ioquatix])
|
|
165
|
+
- Add `.mjs` MIME type ([#2057](https://github.com/rack/rack/pull/2057), [@axilleas](https://github.com/axilleas))
|
|
166
|
+
- `set_cookie_header` utility now supports the `partitioned` cookie attribute. This is required by Chrome in some embedded contexts. ([#2131](https://github.com/rack/rack/pull/2131), [@flavio-b](https://github.com/flavio-b))
|
|
167
|
+
- Introduce `rack.early_hints` for sending `103 Early Hints` informational responses. ([#1831](https://github.com/rack/rack/pull/1831), [@casperisfine](https://github.com/casperisfine), [@jeremyevans])
|
|
168
|
+
|
|
169
|
+
### Changed
|
|
170
|
+
|
|
171
|
+
- MIME type for JavaScript files (`.js`) changed from `application/javascript` to `text/javascript` ([`1bd0f15`](https://github.com/rack/rack/commit/1bd0f1597d8f4a90d47115f3e156a8ce7870c9c8), [@ioquatix])
|
|
172
|
+
- Update MIME types associated to `.ttf`, `.woff`, `.woff2` and `.otf` extensions to use mondern `font/*` types. ([#2065](https://github.com/rack/rack/pull/2065), [@davidstosik])
|
|
173
|
+
- `Rack::Utils.escape_html` is now delegated to `CGI.escapeHTML`. `'` is escaped to `#39;` instead of `#x27;`. (decimal vs hexadecimal) ([#2099](https://github.com/rack/rack/pull/2099), [@JunichiIto](https://github.com/JunichiIto))
|
|
174
|
+
- Clarify use of `@buffered` and only update `content-length` when `Rack::Response#finish` is invoked. ([#2149](https://github.com/rack/rack/pull/2149), [@ioquatix])
|
|
175
|
+
|
|
176
|
+
### Deprecated
|
|
177
|
+
|
|
178
|
+
- Deprecate automatic cache invalidation in `Request#{GET,POST}` ([#2073](https://github.com/rack/rack/pull/2073), [@jeremyevans])
|
|
179
|
+
- Only cookie keys that are not valid according to the HTTP specifications are escaped. We are planning to deprecate this behaviour, so now a deprecation message will be emitted in this case. In the future, invalid cookie keys may not be accepted. ([#2191](https://github.com/rack/rack/pull/2191), [@ioquatix])
|
|
180
|
+
- `Rack::Logger` is deprecated. ([#2197](https://github.com/rack/rack/pull/2197), [@ioquatix])
|
|
181
|
+
- Add fallback lookup and deprecation warning for obsolete status symbols. ([#2137](https://github.com/rack/rack/pull/2137), [@wtn](https://github.com/wtn))
|
|
182
|
+
- Deprecate `Rack::Request#values_at`, use `request.params.values_at` instead ([#2183](https://github.com/rack/rack/pull/2183), [@ioquatix])
|
|
183
|
+
|
|
184
|
+
### Removed
|
|
185
|
+
|
|
186
|
+
- Remove deprecated `Rack::Auth::Digest` with no replacement. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
187
|
+
- Remove deprecated `Rack::Cascade::NotFound` with no replacement. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
188
|
+
- Remove deprecated `Rack::Chunked` with no replacement. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
189
|
+
- Remove deprecated `Rack::File`, use `Rack::Files` instead. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
190
|
+
- Remove deprecated `Rack::QueryParser` `key_space_limit` parameter with no replacement. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
191
|
+
- Remove deprecated `Rack::Response#header`, use `Rack::Response#headers` instead. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
192
|
+
- Remove deprecated cookie methods from `Rack::Utils`: `add_cookie_to_header`, `make_delete_cookie_header`, `add_remove_cookie_to_header`. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
193
|
+
- Remove deprecated `Rack::Utils::HeaderHash`. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
194
|
+
- Remove deprecated `Rack::VERSION`, `Rack::VERSION_STRING`, `Rack.version`, use `Rack.release` instead. ([#1966](https://github.com/rack/rack/pull/1966), [@ioquatix])
|
|
195
|
+
- Remove non-standard status codes 306, 509, & 510 and update descriptions for 413, 422, & 451. ([#2137](https://github.com/rack/rack/pull/2137), [@wtn](https://github.com/wtn))
|
|
196
|
+
- Remove any dependency on `transfer-encoding: chunked`. ([#2195](https://github.com/rack/rack/pull/2195), [@ioquatix])
|
|
197
|
+
- Remove deprecated `Rack::Request#[]`, use `request.params[key]` instead ([#2183](https://github.com/rack/rack/pull/2183), [@ioquatix])
|
|
198
|
+
|
|
199
|
+
### Fixed
|
|
200
|
+
|
|
201
|
+
- In `Rack::Files`, ignore the `Range` header if served file is 0 bytes. ([#2159](https://github.com/rack/rack/pull/2159), [@zarqman])
|
|
202
|
+
|
|
203
|
+
## [3.0.18] - 2025-05-22
|
|
204
|
+
|
|
205
|
+
- Fix incorrect backport of optional `CGI::Cookie` support. ([#2335](https://github.com/rack/rack/pull/2335), [@jeremyevans])
|
|
206
|
+
|
|
207
|
+
## [3.0.17] - 2025-05-18
|
|
208
|
+
|
|
209
|
+
- Optional support for `CGI::Cookie` if not available. ([#2327](https://github.com/rack/rack/pull/2327), [#2333](https://github.com/rack/rack/pull/2333), [@earlopain])
|
|
210
|
+
|
|
211
|
+
## [3.0.16] - 2025-05-06
|
|
212
|
+
|
|
213
|
+
:warning: **This release includes a security fix that may cause certain routes in previously working applications to fail if query parameters exceed 4,096 in count or 4 MB in total size. See <https://github.com/rack/rack/discussions/2356> for more details.**
|
|
214
|
+
|
|
215
|
+
### Security
|
|
216
|
+
|
|
217
|
+
- [CVE-2025-46727](https://github.com/rack/rack/security/advisories/GHSA-gjh7-p2fx-99vx) Unbounded parameter parsing in `Rack::QueryParser` can lead to memory exhaustion.
|
|
218
|
+
|
|
219
|
+
## [3.0.15] - 2025-04-13
|
|
220
|
+
|
|
221
|
+
- Ensure `Rack::ETag` correctly updates response body. ([#2324](https://github.com/rack/rack/pull/2324), [@ioquatix])
|
|
222
|
+
|
|
223
|
+
## [3.0.14] - 2025-03-11
|
|
224
|
+
|
|
225
|
+
### Security
|
|
226
|
+
|
|
227
|
+
- [CVE-2025-27610](https://github.com/rack/rack/security/advisories/GHSA-7wqh-767x-r66v) Local file inclusion in `Rack::Static`.
|
|
228
|
+
|
|
229
|
+
## [3.0.13] - 2025-03-04
|
|
230
|
+
|
|
231
|
+
### Security
|
|
232
|
+
|
|
233
|
+
- [CVE-2025-27111](https://github.com/rack/rack/security/advisories/GHSA-8cgq-6mh2-7j6v) Possible Log Injection in `Rack::Sendfile`.
|
|
234
|
+
|
|
235
|
+
### Fixed
|
|
236
|
+
|
|
237
|
+
- Remove autoloads for constants no longer shipped with Rack. ([#2269](https://github.com/rack/rack/pull/2269), [@ccutrer](https://github.com/ccutrer))
|
|
238
|
+
|
|
239
|
+
## [3.0.12] - 2025-02-12
|
|
240
|
+
|
|
241
|
+
### Security
|
|
242
|
+
|
|
243
|
+
- [CVE-2025-25184](https://github.com/rack/rack/security/advisories/GHSA-7g2v-jj9q-g3rg) Possible Log Injection in `Rack::CommonLogger`.
|
|
244
|
+
|
|
245
|
+
## [3.0.11] - 2024-05-10
|
|
246
|
+
|
|
247
|
+
- Backport #2062 to 3-0-stable: Do not allow `BodyProxy` to respond to `to_str`, make `to_ary` call close . ([#2062](https://github.com/rack/rack/pull/2062), [@jeremyevans](https://github.com/jeremyevans))
|
|
248
|
+
|
|
249
|
+
## [3.0.10] - 2024-03-21
|
|
250
|
+
|
|
251
|
+
- Backport #2104 to 3-0-stable: Return empty when parsing a multi-part POST with only one end delimiter. ([#2164](https://github.com/rack/rack/pull/2164), [@JoeDupuis](https://github.com/JoeDupuis))
|
|
252
|
+
|
|
253
|
+
## [3.0.9.1] - 2024-02-21
|
|
254
|
+
|
|
255
|
+
### Security
|
|
256
|
+
|
|
257
|
+
* [CVE-2024-26146] Fixed ReDoS in Accept header parsing
|
|
258
|
+
* [CVE-2024-25126] Fixed ReDoS in Content Type header parsing
|
|
259
|
+
* [CVE-2024-26141] Reject Range headers which are too large
|
|
260
|
+
|
|
261
|
+
[CVE-2024-26146]: https://github.com/advisories/GHSA-54rr-7fvw-6x8f
|
|
262
|
+
[CVE-2024-25126]: https://github.com/advisories/GHSA-22f2-v57c-j9cx
|
|
263
|
+
[CVE-2024-26141]: https://github.com/advisories/GHSA-xj5v-6v4g-jfw6
|
|
264
|
+
|
|
265
|
+
## [3.0.9] - 2024-01-31
|
|
266
|
+
|
|
267
|
+
- Fix incorrect content-length header that was emitted when `Rack::Response#write` was used in some situations. ([#2150](https://github.com/rack/rack/pull/2150), [@mattbrictson](https://github.com/mattbrictson))
|
|
268
|
+
|
|
269
|
+
## [3.0.8] - 2023-06-14
|
|
270
|
+
|
|
271
|
+
- Fix some unused variable verbose warnings. ([#2084](https://github.com/rack/rack/pull/2084), [@jeremyevans], [@skipkayhil](https://github.com/skipkayhil))
|
|
272
|
+
|
|
273
|
+
## [3.0.7] - 2023-03-16
|
|
274
|
+
|
|
275
|
+
- Make query parameters without `=` have `nil` values. ([#2059](https://github.com/rack/rack/pull/2059), [@jeremyevans])
|
|
276
|
+
|
|
277
|
+
## [3.0.6.1] - 2023-03-13
|
|
278
|
+
|
|
279
|
+
### Security
|
|
280
|
+
|
|
281
|
+
- [CVE-2023-27539] Avoid ReDoS in header parsing
|
|
282
|
+
|
|
283
|
+
## [3.0.6] - 2023-03-13
|
|
284
|
+
|
|
285
|
+
- Add `QueryParser#missing_value` for handling missing values + tests. ([#2052](https://github.com/rack/rack/pull/2052), [@ioquatix])
|
|
286
|
+
|
|
287
|
+
## [3.0.5] - 2023-03-13
|
|
288
|
+
|
|
289
|
+
- Split form/query parsing into two steps. ([#2038](https://github.com/rack/rack/pull/2038), [@matthewd](https://github.com/matthewd))
|
|
290
|
+
|
|
291
|
+
## [3.0.4.2] - 2023-03-02
|
|
292
|
+
|
|
293
|
+
### Security
|
|
6
294
|
|
|
7
295
|
- [CVE-2023-27530] Introduce multipart_total_part_limit to limit total parts
|
|
8
296
|
|
|
9
297
|
## [3.0.4.1] - 2023-01-17
|
|
10
298
|
|
|
299
|
+
### Security
|
|
300
|
+
|
|
11
301
|
- [CVE-2022-44571] Fix ReDoS vulnerability in multipart parser
|
|
12
302
|
- [CVE-2022-44570] Fix ReDoS in Rack::Utils.get_byte_ranges
|
|
13
303
|
- [CVE-2022-44572] Forbid control characters in attributes (also ReDoS)
|
|
@@ -40,6 +330,8 @@ All notable changes to this project will be documented in this file. For info on
|
|
|
40
330
|
|
|
41
331
|
## [3.0.0] - 2022-09-06
|
|
42
332
|
|
|
333
|
+
This release introduces major improvements to Rack, including enhanced support for streaming responses, expanded protocol handling, and stricter compliance with HTTP standards. It refines middleware interfaces, improves multipart and hijack handling, and strengthens security and error reporting. The update also brings performance optimizations, better compatibility with modern Ruby versions, and numerous bug fixes, making Rack more robust and flexible for web application development.
|
|
334
|
+
|
|
43
335
|
- No changes
|
|
44
336
|
|
|
45
337
|
## [3.0.0.rc1] - 2022-09-04
|
|
@@ -128,6 +420,90 @@ All notable changes to this project will be documented in this file. For info on
|
|
|
128
420
|
- Fix multipart filename generation for filenames that contain spaces. Encode spaces as "%20" instead of "+" which will be decoded properly by the multipart parser. ([#1736](https://github.com/rack/rack/pull/1645), [@muirdm](https://github.com/muirdm))
|
|
129
421
|
- `Rack::Request#scheme` returns `ws` or `wss` when one of the `X-Forwarded-Scheme` / `X-Forwarded-Proto` headers is set to `ws` or `wss`, respectively. ([#1730](https://github.com/rack/rack/issues/1730), [@erwanst](https://github.com/erwanst))
|
|
130
422
|
|
|
423
|
+
## [2.2.17] - 2025-06-03
|
|
424
|
+
|
|
425
|
+
- Backport `Rack::MediaType#params` now handles parameters without values. ([#2263](https://github.com/rack/rack/pull/2263), [@AllyMarthaJ](https://github.com/AllyMarthaJ))
|
|
426
|
+
|
|
427
|
+
## [2.2.16] - 2025-05-22
|
|
428
|
+
|
|
429
|
+
- Fix incorrect backport of optional `CGI::Cookie` support. ([#2335](https://github.com/rack/rack/pull/2335), [@jeremyevans])
|
|
430
|
+
|
|
431
|
+
## [2.2.15] - 2025-05-18
|
|
432
|
+
|
|
433
|
+
- Optional support for `CGI::Cookie` if not available. ([#2327](https://github.com/rack/rack/pull/2327), [#2333](https://github.com/rack/rack/pull/2333), [@earlopain])
|
|
434
|
+
|
|
435
|
+
## [2.2.14] - 2025-05-06
|
|
436
|
+
|
|
437
|
+
:warning: **This release includes a security fix that may cause certain routes in previously working applications to fail if query parameters exceed 4,096 in count or 4 MB in total size. See <https://github.com/rack/rack/discussions/2356> for more details.**
|
|
438
|
+
|
|
439
|
+
### Security
|
|
440
|
+
|
|
441
|
+
- [CVE-2025-46727](https://github.com/rack/rack/security/advisories/GHSA-gjh7-p2fx-99vx) Unbounded parameter parsing in `Rack::QueryParser` can lead to memory exhaustion.
|
|
442
|
+
|
|
443
|
+
## [2.2.13] - 2025-03-11
|
|
444
|
+
|
|
445
|
+
### Security
|
|
446
|
+
|
|
447
|
+
- [CVE-2025-27610](https://github.com/rack/rack/security/advisories/GHSA-7wqh-767x-r66v) Local file inclusion in `Rack::Static`.
|
|
448
|
+
|
|
449
|
+
## [2.2.12] - 2025-03-04
|
|
450
|
+
|
|
451
|
+
### Security
|
|
452
|
+
|
|
453
|
+
- [CVE-2025-27111](https://github.com/rack/rack/security/advisories/GHSA-8cgq-6mh2-7j6v) Possible Log Injection in `Rack::Sendfile`.
|
|
454
|
+
|
|
455
|
+
## [2.2.11] - 2025-02-12
|
|
456
|
+
|
|
457
|
+
### Security
|
|
458
|
+
|
|
459
|
+
- [CVE-2025-25184](https://github.com/rack/rack/security/advisories/GHSA-7g2v-jj9q-g3rg) Possible Log Injection in `Rack::CommonLogger`.
|
|
460
|
+
|
|
461
|
+
## [2.2.10] - 2024-10-14
|
|
462
|
+
|
|
463
|
+
- Fix compatibility issues with Ruby v3.4.0. ([#2248](https://github.com/rack/rack/pull/2248), [@byroot](https://github.com/byroot))
|
|
464
|
+
|
|
465
|
+
## [2.2.9] - 2023-03-21
|
|
466
|
+
|
|
467
|
+
- Return empty when parsing a multi-part POST with only one end delimiter. ([#2104](https://github.com/rack/rack/pull/2104), [@alpaca-tc])
|
|
468
|
+
|
|
469
|
+
## [2.2.8] - 2023-07-31
|
|
470
|
+
|
|
471
|
+
- Regenerate SPEC ([#2102](https://github.com/rack/rack/pull/2102), [@skipkayhil](https://github.com/skipkayhil))
|
|
472
|
+
- Limit file extension length of multipart tempfiles ([#2015](https://github.com/rack/rack/pull/2015), [@dentarg](https://github.com/dentarg))
|
|
473
|
+
- Fix "undefined method DelegateClass for Rack::Session::Cookie:Class" ([#2092](https://github.com/rack/rack/pull/2092), [@onigra](https://github.com/onigra) [@dchandekstark](https://github.com/dchandekstark))
|
|
474
|
+
|
|
475
|
+
## [2.2.7] - 2023-03-13
|
|
476
|
+
|
|
477
|
+
- Correct the year number in the changelog ([#2015](https://github.com/rack/rack/pull/2015), [@kimulab](https://github.com/kimulab))
|
|
478
|
+
- Support underscore in host names for Rack 2.2 (Fixes [#2070](https://github.com/rack/rack/issues/2070)) ([#2015](https://github.com/rack/rack/pull/2071), [@jeremyevans](https://github.com/jeremyevans))
|
|
479
|
+
|
|
480
|
+
## [2.2.6.4] - 2023-03-13
|
|
481
|
+
|
|
482
|
+
- [CVE-2023-27539] Avoid ReDoS in header parsing
|
|
483
|
+
|
|
484
|
+
## [2.2.6.3] - 2023-03-02
|
|
485
|
+
|
|
486
|
+
- [CVE-2023-27530] Introduce multipart_total_part_limit to limit total parts
|
|
487
|
+
|
|
488
|
+
## [2.2.6.2] - 2023-01-17
|
|
489
|
+
|
|
490
|
+
- [CVE-2022-44570] Fix ReDoS in Rack::Utils.get_byte_ranges
|
|
491
|
+
|
|
492
|
+
## [2.2.6.1] - 2023-01-17
|
|
493
|
+
|
|
494
|
+
- [CVE-2022-44571] Fix ReDoS vulnerability in multipart parser
|
|
495
|
+
- [CVE-2022-44572] Forbid control characters in attributes (also ReDoS)
|
|
496
|
+
|
|
497
|
+
## [2.2.6] - 2023-01-17
|
|
498
|
+
|
|
499
|
+
- Extend `Rack::MethodOverride` to handle `QueryParser::ParamsTooDeepError` error. ([#2011](https://github.com/rack/rack/pull/2011), [@byroot](https://github.com/byroot))
|
|
500
|
+
|
|
501
|
+
## [2.2.5] - 2022-12-27
|
|
502
|
+
|
|
503
|
+
### Fixed
|
|
504
|
+
|
|
505
|
+
- `Rack::URLMap` uses non-deprecated form of `Regexp.new`. ([#1998](https://github.com/rack/rack/pull/1998), [@weizheheng](https://github.com/weizheheng))
|
|
506
|
+
|
|
131
507
|
## [2.2.4] - 2022-06-30
|
|
132
508
|
|
|
133
509
|
- Better support for lower case headers in `Rack::ETag` middleware. ([#1919](https://github.com/rack/rack/pull/1919), [@ioquatix](https://github.com/ioquatix))
|
|
@@ -135,6 +511,8 @@ All notable changes to this project will be documented in this file. For info on
|
|
|
135
511
|
|
|
136
512
|
## [2.2.3.1] - 2022-05-27
|
|
137
513
|
|
|
514
|
+
### Security
|
|
515
|
+
|
|
138
516
|
- [CVE-2022-30123] Fix shell escaping issue in Common Logger
|
|
139
517
|
- [CVE-2022-30122] Restrict parsing of broken MIME attachments
|
|
140
518
|
|
|
@@ -842,3 +1220,7 @@ Items below this line are from the previously maintained HISTORY.md and NEWS.md
|
|
|
842
1220
|
[@amatsuda]: https://github.com/amatsuda "Akira Matsuda"
|
|
843
1221
|
[@wjordan]: https://github.com/wjordan "Will Jordan"
|
|
844
1222
|
[@BlakeWilliams]: https://github.com/BlakeWilliams "Blake Williams"
|
|
1223
|
+
[@davidstosik]: https://github.com/davidstosik "David Stosik"
|
|
1224
|
+
[@earlopain]: https://github.com/earlopain "Earlopain"
|
|
1225
|
+
[@wynksaiddestroy]: https://github.com/wynksaiddestroy "Fabian Winkler"
|
|
1226
|
+
[@matthewd]: https://github.com/matthewd "Matthew Draper"
|
data/CONTRIBUTING.md
CHANGED
|
@@ -5,6 +5,15 @@ contributors](https://github.com/rack/rack/graphs/contributors). You're
|
|
|
5
5
|
encouraged to submit [pull requests](https://github.com/rack/rack/pulls) and
|
|
6
6
|
[propose features and discuss issues](https://github.com/rack/rack/issues).
|
|
7
7
|
|
|
8
|
+
## Backports
|
|
9
|
+
|
|
10
|
+
Only security patches are ideal for backporting to non-main release versions. If
|
|
11
|
+
you're not sure if your bug fix is backportable, you should open a discussion to
|
|
12
|
+
discuss it first.
|
|
13
|
+
|
|
14
|
+
The [Security Policy] documents which release versions will receive security
|
|
15
|
+
backports.
|
|
16
|
+
|
|
8
17
|
## Fork the Project
|
|
9
18
|
|
|
10
19
|
Fork the [project on GitHub](https://github.com/rack/rack) and check out your
|
|
@@ -27,15 +36,6 @@ git pull upstream main
|
|
|
27
36
|
git checkout -b my-feature-branch
|
|
28
37
|
```
|
|
29
38
|
|
|
30
|
-
## Bundle Install and Quick Test
|
|
31
|
-
|
|
32
|
-
Ensure that you can build the project and run quick tests.
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
bundle install --without extra
|
|
36
|
-
bundle exec rake test
|
|
37
|
-
```
|
|
38
|
-
|
|
39
39
|
## Running All Tests
|
|
40
40
|
|
|
41
41
|
Install all dependencies.
|
|
@@ -140,3 +140,5 @@ there!
|
|
|
140
140
|
|
|
141
141
|
Please do know that we really appreciate and value your time and work. We love
|
|
142
142
|
you, really.
|
|
143
|
+
|
|
144
|
+
[Security Policy]: SECURITY.md
|