]> Cypherpunks repositories - gostls13.git/commit
net/url: do not percent-encode valid host characters
authorRuss Cox <rsc@golang.org>
Thu, 6 Aug 2015 01:45:30 +0000 (21:45 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 6 Aug 2015 02:55:37 +0000 (02:55 +0000)
commite8be9a170c3044d7460a6b2c8349a723b1a21dd2
tree6bd6bc51c96c05ca8f95c3b99775d26886997f56
parent91e3b3516837372fac630698b1efc06e60909f4d
net/url: do not percent-encode valid host characters

The code in question was added as part of allowing zone identifiers
in IPv6 literals like http://[ipv6%zone]:port/foo, in golang.org/cl/2431.

The old condition makes no sense. It refers to §3.2.1, which is the wrong section
of the RFC, it excludes all the sub-delims, which §3.2.2 (the right section)
makes clear are valid, and it allows ':', which is not actually valid,
without an explanation as to why (because we keep :port in the Host field
of the URL struct).

The new condition allows all the sub-delims, as specified in RFC 3986,
plus the additional characters [ ] : seen in IP address literals and :port suffixes,
which we also keep in the Host field.

This allows mysql://a,b,c/path to continue to parse, as it did in Go 1.4 and earlier.

This CL does not break any existing tests, suggesting the over-conservative
behavior was not intended and perhaps not realized.

It is especially important not to over-escape the host field, because
Go does not unescape the host field during parsing: it rejects any
host field containing % characters.

Fixes #12036.

Change-Id: Iccbe4985957b3dc58b6dfb5dcb5b63a51a6feefb
Reviewed-on: https://go-review.googlesource.com/13254
Reviewed-by: Andrew Gerrand <adg@golang.org>
Reviewed-by: Mikio Hara <mikioh.mikioh@gmail.com>
src/net/url/url.go
src/net/url/url_test.go