HISTORY - rack-1.6.2 Documentation

Fri Jun 12 11:37:41 2015 Aaron Patterson tenderlove@ruby-lang.org

        * Prevent extremely deep parameters from being parsed. CVE-2015-3225

### December 18th, Thirty sixth public release 1.6.0¶ ↑

### February 7th, Thirty fifth public release 1.5.2¶ ↑

- Fix CVE-2013-0263, timing attack against Rack::Session::Cookie

- Fix CVE-2013-0262, symlink path traversal in Rack::File

- Add various methods to Session for enhanced Rails compatibility

- Request#trusted_proxy? now only matches whole stirngs

- Add JSON cookie coder, to be default in Rack 1.6+ due to security concerns

- URLMap host matching in environments that don't set the Host header fixed

- Fix a race condition that could result in overwritten pidfiles

- Various documentation additions

### February 7th, Thirty fifth public release 1.4.5¶ ↑

- Fix CVE-2013-0263, timing attack against Rack::Session::Cookie

- Fix CVE-2013-0262, symlink path traversal in Rack::File

### February 7th, Thirty fifth public release 1.1.6, 1.2.8, 1.3.10¶ ↑

- Fix CVE-2013-0263, timing attack against Rack::Session::Cookie

### January 28th, 2013: Thirty fourth public release 1.5.1¶ ↑

- Rack::Lint check_hijack now conforms to other parts of SPEC

- Added hash-like methods to Abstract::ID::SessionHash for compatibility

- Various documentation corrections

### January 21st, 2013: Thirty third public release 1.5.0¶ ↑

- Introduced hijack SPEC, for before-response and after-response hijacking

- SessionHash is no longer a Hash subclass

- Rack::File cache_control parameter is removed, in place of headers options

- Rack::Auth::AbstractRequest#scheme now yields strings, not symbols

- Rack::Utils cookie functions now format expires in RFC 2822 format

- Rack::File now has a default mime type

- rackup -b 'run Rack::File.new(“.”)', option provides command line configs

- Rack::Deflater will no longer double encode bodies

- Rack::Mime#match? provides convenience for Accept header matching

- Rack::Utils#q_values provides splitting for Accept headers

- Rack::Utils#best_q_match provides a helper for Accept headers

- Rack::Handler.pick provides convenience for finding available servers

- Puma added to the list of default servers (preferred over Webrick)

- Various middleware now correctly close body when replacing it

- Rack::Request#params is no longer persistent with only GET params

- Rack::Request#update_param and delete_param provide persistent operations

- Rack::Request#trusted_proxy? now returns true for local unix sockets

- Rack::Response no longer forces Content-Types

- Rack::Sendfile provides local mapping configuration options

- Rack::Utils#rfc2109 provides old netscape style time output

- Updated HTTP status codes

- Ruby 1.8.6 likely no longer passes tests, and is no longer fully supported

### January 13th, 2013: Thirty second public release 1.4.4, 1.3.9, 1.2.7, 1.1.5¶ ↑

- [SEC] Rack::Auth::AbstractRequest no longer symbolizes arbitrary strings

- Fixed erroneous test case in the 1.3.x series

### January 7th, 2013: Thirty first public release 1.4.3¶ ↑

- Security: Prevent unbounded reads in large multipart boundaries

### January 7th, 2013: Thirtieth public release 1.3.8¶ ↑

- Security: Prevent unbounded reads in large multipart boundaries

### January 6th, 2013: Twenty ninth public release 1.4.2¶ ↑

- Add warnings when users do not provide a session secret

- Fix parsing performance for unquoted filenames

- Updated URI backports

- Fix URI backport version matching, and silence constant warnings

- Correct parameter parsing with empty values

- Correct rackup '-I' flag, to allow multiple uses

- Correct rackup pidfile handling

- Report rackup line numbers correctly

- Fix request loops caused by non-stale nonces with time limits

- Fix reloader on Windows

- Prevent infinite recursions from Response#to_ary

- Various middleware better conforms to the body close specification

- Updated language for the body close specification

- Additional notes regarding ECMA escape compatibility issues

- Fix the parsing of multiple ranges in range headers

- Prevent errors from empty parameter keys

- Added PATCH verb to Rack::Request

- Various documentation updates

- Fix session merge semantics (fixes rack-test)

- Rack::Static :index can now handle multiple directories

- All tests now utilize Rack::Lint (special thanks to Lars Gierth)

- Rack::File cache_control parameter is now deprecated, and removed by 1.5

- Correct Rack::Directory script name escaping

- Rack::Static supports header rules for sophisticated configurations

- Multipart parsing now works without a Content-Length header

- New logos courtesy of Zachary Scott!

- Rack::BodyProxy now explicitly defines each, useful for C extensions

- Cookies that are not URI escaped no longer cause exceptions

### January 6th, 2013: Twenty eighth public release 1.3.7¶ ↑

- Add warnings when users do not provide a session secret

- Fix parsing performance for unquoted filenames

- Updated URI backports

- Fix URI backport version matching, and silence constant warnings

- Correct parameter parsing with empty values

- Correct rackup '-I' flag, to allow multiple uses

- Correct rackup pidfile handling

- Report rackup line numbers correctly

- Fix request loops caused by non-stale nonces with time limits

- Fix reloader on Windows

- Prevent infinite recursions from Response#to_ary

- Various middleware better conforms to the body close specification

- Updated language for the body close specification

- Additional notes regarding ECMA escape compatibility issues

- Fix the parsing of multiple ranges in range headers

### January 6th, 2013: Twenty seventh public release 1.2.6¶ ↑

- Add warnings when users do not provide a session secret

- Fix parsing performance for unquoted filenames

### January 6th, 2013: Twenty sixth public release 1.1.4¶ ↑

- Add warnings when users do not provide a session secret

### January 22nd, 2012: Twenty fifth public release 1.4.1¶ ↑

- Alter the keyspace limit calculations to reduce issues with nested params

- Add a workaround for multipart parsing where files contain unescaped “%”

- Added Rack::Response::Helpers#method_not_allowed? (code 405)

- Rack::File now returns 404 for illegal directory traversals

- Rack::File now returns 405 for illegal methods (non HEAD/GET)

- Rack::Cascade now catches 405 by default, as well as 404

- Cookies missing '–' no longer cause an exception to be raised

- Various style changes and documentation spelling errors

- Rack::BodyProxy always ensures to execute its block

- Additional test coverage around cookies and secrets

- Rack::Session::Cookie can now be supplied either secret or old_secret

- Tests are no longer dependent on set order

- Rack::Static no longer defaults to serving index files

- Rack.release was fixed

### December 28th, 2011: Twenty fourth public release 1.4.0¶ ↑

- Ruby 1.8.6 support has officially been dropped. Not all tests pass.

- Raise sane error messages for broken config.ru

- Allow combining run and map in a config.ru

- Rack::ContentType will not set Content-Type for responses without a body

- Status code 205 does not send a response body

- Rack::Response::Helpers will not rely on instance variables

- Rack::Utils#build_query no longer outputs '=' for nil query values

- Various mime types added

- Rack::MockRequest now supports HEAD

- Rack::Directory now supports files that contain RFC3986 reserved chars

- Rack::File now only supports GET and HEAD requests

- Rack::Server#start now passes the block to Rack::Handler::<h>#run

- Rack::Static now supports an index option

- Added the Teapot status code

- rackup now defaults to Thin instead of Mongrel (if installed)

- Support added for HTTP_X_FORWARDED_SCHEME

- Numerous bug fixes, including many fixes for new and alternate rubies

### December 28th, 2011: Twenty first public release: 1.1.3.¶ ↑

- Security fix. www.ocert.org/advisories/ocert-2011-003.html Further information here: jruby.org/2011/12/27/jruby-1-6-5-1

### October 17, 2011: Twentieth public release 1.3.5¶ ↑

- Fix annoying warnings caused by the backport in 1.3.4

### October 1, 2011: Nineteenth public release 1.3.4¶ ↑

- Backport security fix from 1.9.3, also fixes some roundtrip issues in URI

- Small documentation update

- Fix an issue where BodyProxy could cause an infinite recursion

- Add some supporting files for travis-ci

### September 16, 2011: Eighteenth public release 1.2.4¶ ↑

- Fix a bug with MRI regex engine to prevent XSS by malformed unicode

### September 16, 2011: Seventeenth public release 1.3.3¶ ↑

- Fix bug with broken query parameters in Rack::ShowExceptions

- Rack::Request#cookies no longer swallows exceptions on broken input

- Prevents XSS attacks enabled by bug in Ruby 1.8's regexp engine

- Rack::ConditionalGet handles broken If-Modified-Since helpers

### July 16, 2011: Sixteenth public release 1.3.2¶ ↑

- Fix for Rails and rack-test, Rack::Utils#escape calls to_s

### July 13, 2011: Fifteenth public release 1.3.1¶ ↑

- Fix 1.9.1 support

- Fix JRuby support

- Properly handle $KCODE in Rack::Utils#escape

- Make method_missing/respond_to behavior consistent for Rack::Lock, Rack::Auth::Digest::Request and Rack::Multipart::UploadedFile

- Reenable passing rack.session to session middleware

- Rack::CommonLogger handles streaming responses correctly

- Rack::MockResponse calls close on the body object

- Fix a DOS vector from MRI stdlib backport

### May 22nd, 2011: Fourteenth public release 1.2.3¶ ↑

- Pulled in relevant bug fixes from 1.3

- Fixed 1.8.6 support

### May 22nd, 2011: Thirteenth public release 1.3.0¶ ↑

- Various performance optimizations

- Various multipart fixes

- Various multipart refactors

- Infinite loop fix for multipart

- Test coverage for Rack::Server returns

- Allow files with '..', but not path components that are '..'

- rackup accepts handler-specific options on the command line

- Request#params no longer merges POST into GET (but returns the same)

- Use URI.encode_www_form_component instead. Use core methods for escaping.

- Allow multi-line comments in the config file

- Bug L#94 reported by Nikolai Lugovoi, query parameter unescaping.

- Rack::Response now deletes Content-Length when appropriate

- Rack::Deflater now supports streaming

- Improved Rack::Handler loading and searching

- Support for the PATCH verb

- env now contains session options

- Cookies respect renew

- Session middleware uses SecureRandom.hex

### March 13th, 2011: Twelfth public release 1.2.2/1.1.2.¶ ↑

- Security fix in Rack::Auth::Digest::MD5: when authenticator returned nil, permission was granted on empty password.

### June 15th, 2010: Eleventh public release 1.2.1.¶ ↑

- Make CGI handler rewindable

- Rename spec/ to test/ to not conflict with SPEC on lesser operating systems

### June 13th, 2010: Tenth public release 1.2.0.¶ ↑

- Removed Camping adapter: Camping 2.0 supports Rack as-is

- Removed parsing of quoted values

- Add Request.trace? and Request.options?

- Add mime-type for .webm and .htc

- Fix HTTP_X_FORWARDED_FOR

- Various multipart fixes

- Switch test suite to bacon

### January 3rd, 2010: Ninth public release 1.1.0.¶ ↑

- Moved Auth::OpenID to rack-contrib.

- SPEC change that relaxes Lint slightly to allow subclasses of the required types

- SPEC change to document rack.input binary mode in greator detail

- SPEC define optional rack.logger specification

- File servers support X-Cascade header

- Imported Config middleware

- Imported ETag middleware

- Imported Runtime middleware

- Imported Sendfile middleware

- New Logger and NullLogger middlewares

- Added mime type for .ogv and .manifest.

- Don't squeeze PATH_INFO slashes

- Use Content-Type to determine POST params parsing

- Update Rack::Utils::HTTP_STATUS_CODES hash

- Add status code lookup utility

- Response should call to_i on the status

- Add Request#user_agent

- Request#host knows about forwared host

- Return an empty string for Request#host if HTTP_HOST and SERVER_NAME are both missing

- Allow MockRequest to accept hash params

- Optimizations to HeaderHash

- Refactored rackup into Rack::Server

- Added Utils.build_nested_query to complement Utils.parse_nested_query

- Added Utils::Multipart.build_multipart to complement Utils::Multipart.parse_multipart

- Extracted set and delete cookie helpers into Utils so they can be used outside Response

- Extract parse_query and parse_multipart in Request so subclasses can change their behavior

- Enforce binary encoding in RewindableInput

- Set correct external_encoding for handlers that don't use RewindableInput

### October 18th, 2009: Eighth public release 1.0.1.¶ ↑

- Bump remainder of rack.versions.

- Support the pure Ruby FCGI implementation.

- Fix for form names containing “=”: split first then unescape components

- Fixes the handling of the filename parameter with semicolons in names.

- Add anchor to nested params parsing regexp to prevent stack overflows

- Use more compatible gzip write api instead of “<<”.

- Make sure that Reloader doesn't break when executed via ruby -e

- Make sure WEBrick respects the :Host option

- Many Ruby 1.9 fixes.

### April 25th, 2009: Seventh public release 1.0.0.¶ ↑

- SPEC change: Rack::VERSION has been pushed to [1,0].

- SPEC change: header values must be Strings now, split on “n”.

- SPEC change: Content-Length can be missing, in this case chunked transfer encoding is used.

- SPEC change: rack.input must be rewindable and support reading into a buffer, wrap with Rack::RewindableInput if it isn't.

- SPEC change: rack.session is now specified.

- SPEC change: Bodies can now additionally respond to to_path with a filename to be served.

- NOTE: String bodies break in 1.9, use an Array consisting of a single String instead.

- New middleware Rack::Lock.

- New middleware Rack::ContentType.

- Rack::Reloader has been rewritten.

- Major update to Rack::Auth::OpenID.

- Support for nested parameter parsing in Rack::Response.

- Support for redirects in Rack::Response.

- HttpOnly cookie support in Rack::Response.

- The Rakefile has been rewritten.

- Many bugfixes and small improvements.

### January 9th, 2009: Sixth public release 0.9.1.¶ ↑

- Fix directory traversal exploits in Rack::File and Rack::Directory.

### January 6th, 2009: Fifth public release 0.9.¶ ↑

- Rack is now managed by the Rack Core Team.

- Rack::Lint is stricter and follows the HTTP RFCs more closely.

- Added ConditionalGet middleware.

- Added ContentLength middleware.

- Added Deflater middleware.

- Added Head middleware.

- Added MethodOverride middleware.

- Rack::Mime now provides popular MIME-types and their extension.

- Mongrel Header now streams.

- Added Thin handler.

- Official support for swiftiplied Mongrel.

- Secure cookies.

- Made HeaderHash case-preserving.

- Many bugfixes and small improvements.

### August 21st, 2008: Fourth public release 0.4.¶ ↑

- New middleware, Rack::Deflater, by Christoffer Sawicki.

- OpenID authentication now needs ruby-openid 2.

- New Memcache sessions, by blink.

- Explicit EventedMongrel handler, by Joshua Peek josh@joshpeek.com

- Rack::Reloader is not loaded in rackup development mode.

- rackup can daemonize with -D.

- Many bugfixes, especially for pool sessions, URLMap, thread safety and tempfile handling.

- Improved tests.

- Rack moved to Git.

### February 26th, 2008: Third public release 0.3.¶ ↑

- LiteSpeed handler, by Adrian Madrid.

- SCGI handler, by Jeremy Evans.

- Pool sessions, by blink.

- OpenID authentication, by blink.

- :Port and :File options for opening FastCGI sockets, by blink.

- Last-Modified HTTP header for Rack::File, by blink.

- Rack::Builder#use now accepts blocks, by Corey Jewett. (See example/protectedlobster.ru)

- HTTP status 201 can contain a Content-Type and a body now.

- Many bugfixes, especially related to Cookie handling.

### May 16th, 2007: Second public release 0.2.¶ ↑

- HTTP Basic authentication.

- Cookie Sessions.

- Static file handler.

- Improved Rack::Request.

- Improved Rack::Response.

- Added Rack::ShowStatus, for better default error messages.

- Bug fixes in the Camping adapter.

- Removed Rails adapter, was too alpha.

### March 3rd, 2007: First public release 0.1.¶ ↑