Issue #12235 has been updated by Luca Spiller.

Subject changed from URI::Encode issue with square brackets to URI.encode issue with square brackets

----------------------------------------
Bug #12235: URI.encode issue with square brackets
https://bugs.ruby-lang.org/issues/12235#change-57872

* Author: Luca Spiller
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
URI::Encode doesn't correctly handle square brackets in the path of a URL:

    > URI.encode('http://example.com/resource[1].doc')
    => "http://example.com/resource[1].doc"

It should return "http://example.com/resource%5B1%5D.doc".

As per [RFC3986](http://tools.ietf.org/html/rfc3986#appendix-D.1), square brackets are only valid in the host part, not the path part.

URI.parse correctly raises an error if a URL has square brackets in the path, which means URI::encode can return something that is rejected by URI.parse:

    > URi.parse('http://example.com/resource[1].doc')
    URI::InvalidURIError: bad URI(is not URI?): http://example.com/resource[1].doc

    > URI.parse(URI::encode('http://example.com/resource[1].doc'))
    URI::InvalidURIError: bad URI(is not URI?): http://example.com/resource[1].doc

Tested on Ruby 2.1.5 and 2.3.0 on OS X and Linux.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>