From: Johnny Luo Date: Sun, 16 Jul 2017 00:39:11 +0000 (+1000) Subject: net/url: make Parse+String round trip magnet URLs X-Git-Tag: go1.10beta1~1254 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a9216a0ade61ae3c3a45f9cd358a8a38c5d241a5;p=gostls13.git net/url: make Parse+String round trip magnet URLs Fixes #20054 Change-Id: I3c660ca0c56cdde2c2ac2f6a666d8531ab5588c5 Reviewed-on: https://go-review.googlesource.com/49050 Run-TryBot: Emmanuel Odeke TryBot-Result: Gobot Gobot Reviewed-by: Joe Tsai --- diff --git a/src/net/url/url.go b/src/net/url/url.go index 00e0df17ba..c9353ab080 100644 --- a/src/net/url/url.go +++ b/src/net/url/url.go @@ -726,7 +726,9 @@ func (u *URL) String() string { buf.WriteString(u.Opaque) } else { if u.Scheme != "" || u.Host != "" || u.User != nil { - buf.WriteString("//") + if u.Host != "" || u.Path != "" || u.User != nil { + buf.WriteString("//") + } if ui := u.User; ui != nil { buf.WriteString(ui.String()) buf.WriteByte('@') diff --git a/src/net/url/url_test.go b/src/net/url/url_test.go index 6c3bb21d20..5f03200d94 100644 --- a/src/net/url/url_test.go +++ b/src/net/url/url_test.go @@ -568,6 +568,28 @@ var urltests = []URLTest{ }, "", }, + // test we can roundtrip magnet url + // fix issue https://golang.org/issue/20054 + { + "magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn", + &URL{ + Scheme: "magnet", + Host: "", + Path: "", + RawQuery: "xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn", + }, + "magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a&dn", + }, + { + "mailto:?subject=hi", + &URL{ + Scheme: "mailto", + Host: "", + Path: "", + RawQuery: "subject=hi", + }, + "mailto:?subject=hi", + }, } // more useful string for debugging than fmt's struct printer