Skip to content

Commit

Permalink
net/http: strip escaped password from error
Browse files Browse the repository at this point in the history
Using password that returns from User.Password() won't work in this case
because password in Userinfo already unescaped. The solution is uses
User.String() to escape password back again and then stringify it to error.

Fixes #31808

Change-Id: I723aafd5a57a5b69f2dd7d3a21b82ebbd4174451
Reviewed-on: https://go-review.googlesource.com/c/go/+/175018
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
  • Loading branch information
wingyplus authored and bradfitz committed May 3, 2019
1 parent f5c43b9 commit 2c67cdf
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 3 deletions.
5 changes: 2 additions & 3 deletions src/net/http/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -926,10 +926,9 @@ func isDomainOrSubdomain(sub, parent string) bool {
}

func stripPassword(u *url.URL) string {
pass, passSet := u.User.Password()
_, passSet := u.User.Password()
if passSet {
return strings.Replace(u.String(), pass+"@", "***@", 1)
return strings.Replace(u.String(), u.User.String()+"@", u.User.Username()+":***@", 1)
}

return u.String()
}
5 changes: 5 additions & 0 deletions src/net/http/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1184,6 +1184,11 @@ func TestStripPasswordFromError(t *testing.T) {
in: "http://user:password@dummy.faketld/password",
out: "Get http://user:***@dummy.faketld/password: dummy impl",
},
{
desc: "Strip escaped password",
in: "http://user:pa%2Fssword@dummy.faketld/",
out: "Get http://user:***@dummy.faketld/: dummy impl",
},
}
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
Expand Down

0 comments on commit 2c67cdf

Please sign in to comment.