<p dir="auto">by <strong>Jens.Alfke</strong>:</p>
<pre class="notranslate">url.Parse changes escaped “/“ characters (“%2F”) back into literal slashes. This
alters the meaning of the URL, and will cause trouble with HTTP handlers if they need to
accept path components containing slashes.

Here’s a playground example: <a href="http://play.golang.org/p/3q4yN7QsGf" rel="nofollow">http://play.golang.org/p/3q4yN7QsGf</a>
It demonstrates that calling
    url.Parse("<a href="http://example.com/AC%2FDC/Back%20In%20Black" rel="nofollow">http://example.com/AC%2FDC/Back%20In%20Black</a>”)
results in the URL
    <a href="http://example.com/AC/DC/Back%20In%20Black" rel="nofollow">http://example.com/AC/DC/Back%20In%20Black</a>
where the %2F has incorrectly been unescaped into a “/“. 

This will cause trouble when an HTTP handler breaks the path apart — imagine a REST
server that returns info about a record album given a GET to the path
“/artist/albumname”. Works great until you look up AC/DC — you encode the artist
as “AC%2FDC” then plug that into a URL, but the Go side unescapes the %2F, and the
path components end up as [“AC”, “DC”, “Back In Black”] which of course
doesn’t work.

As a more serious example, CouchDB's REST API allows document IDs to contain slash
characters, which then have to be escaped in URLs. I'm implementing a CouchDB-compatible
server (<a href="https://github.com/couchbase/sync_gateway)">https://github.com/couchbase/sync_gateway)</a> which cannot correctly handle such
documents.

I can't think of a way for an HTTP handler to work around this, because the URL that it
gets in the Request object has already been damaged, and I don't think it can find the
original raw URL string from the client.

What steps will reproduce the problem?
Run <a href="http://play.golang.org/p/3q4yN7QsGf" rel="nofollow">http://play.golang.org/p/3q4yN7QsGf</a>

What is the expected output?
Path components decode as ["AC/DC", "Back In Black"]

What do you see instead?
Path components decode as ["AC", "DC", "Back In Black"].
The example panics.

Which compiler are you using (5g, 6g, 8g, gccgo)?
go build

Which operating system are you using?
Mac OS X 10.9

Which version are you using?  (run 'go version')
1.1.2</pre>
<p dir="auto">by <strong>powerman.asdf</strong>:</p>
<pre class="notranslate">What steps will reproduce the problem?
1. Just follow installation instruction and run ./all.bash (also tried with hg pull -u)

What is the expected output?
Go should finish compiling/installing.

What do you see instead?
make hangs and should be interrupted with Ctrl-C

Which compiler are you using (5g, 6g, 8g, gccgo)?
8g

Which operating system are you using?
Hardened Gentoo Linux

Which revision are you using?  (hg identify)
1268b4436e07 tip

Please provide any additional information below.
…
8g -o _go_.8 download.go main.go make.go parse.go syslist.go 
cgo -dynimport _cgo1_.o &gt;_obj/_cgo_import.c_ &amp;&amp; mv -f _obj/_cgo_import.c_
_obj/_cgo_import.c
throw: out of memory (FixAlloc)

rm -f _obj/websocket.a
gopack grc _obj/websocket.a _go_.8 
8l -o goinstall _go_.8
cp _obj/websocket.a "/home/powerman/tmp/go/pkg/linux_386/websocket.a"
make[1]: Leaving directory `/home/powerman/tmp/go/src/pkg/websocket'
make -C rpc/jsonrpc install
make[1]: Entering directory `/home/powerman/tmp/go/src/pkg/rpc/jsonrpc'
8g -o _go_.8 client.go server.go 
rm -f _obj/rpc/jsonrpc.a
gopack grc _obj/rpc/jsonrpc.a _go_.8 
cp _obj/rpc/jsonrpc.a "/home/powerman/tmp/go/pkg/linux_386/rpc/jsonrpc.a"
make[1]: Leaving directory `/home/powerman/tmp/go/src/pkg/rpc/jsonrpc'
8l -o godoc _go_.8
cp -f goinstall /home/powerman/tmp/go/bin
make[1]: Leaving directory `/home/powerman/tmp/go/src/cmd/goinstall'
cp -f godoc /home/powerman/tmp/go/bin
make[1]: Leaving directory `/home/powerman/tmp/go/src/cmd/godoc'

^Cmake[1]: *** [_obj/_cgo_import.c] Interrupt
make: *** [runtime/cgo.install] Interrupt</pre>