mirror of
https://github.com/golang/go
synced 2024-11-14 22:30:26 -07:00
[release-branch.go1.15] net/http: deep copy Request.TransferEncoding
The existing implementation in Request.Clone() assigns the wrong pointer to r2.TransferEncoding. Updates #41907. Fixes #41914. Change-Id: I7f220a41b1b46a55d1a1005e47c6dd69478cb025 Reviewed-on: https://go-review.googlesource.com/c/go/+/261378 Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Trust: Carlos Amedee <carlos@golang.org> Trust: Emmanuel Odeke <emm.odeke@gmail.com>
This commit is contained in:
parent
f68af196a3
commit
1a05c910fb
@ -382,7 +382,7 @@ func (r *Request) Clone(ctx context.Context) *Request {
|
||||
if s := r.TransferEncoding; s != nil {
|
||||
s2 := make([]string, len(s))
|
||||
copy(s2, s)
|
||||
r2.TransferEncoding = s
|
||||
r2.TransferEncoding = s2
|
||||
}
|
||||
r2.Form = cloneURLValues(r.Form)
|
||||
r2.PostForm = cloneURLValues(r.PostForm)
|
||||
|
@ -828,6 +828,27 @@ func TestWithContextDeepCopiesURL(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure that Request.Clone creates a deep copy of TransferEncoding.
|
||||
// See issue 41907.
|
||||
func TestRequestCloneTransferEncoding(t *testing.T) {
|
||||
body := strings.NewReader("body")
|
||||
req, _ := NewRequest("POST", "https://example.org/", body)
|
||||
req.TransferEncoding = []string{
|
||||
"encoding1",
|
||||
}
|
||||
|
||||
clonedReq := req.Clone(context.Background())
|
||||
// modify original after deep copy
|
||||
req.TransferEncoding[0] = "encoding2"
|
||||
|
||||
if req.TransferEncoding[0] != "encoding2" {
|
||||
t.Error("expected req.TransferEncoding to be changed")
|
||||
}
|
||||
if clonedReq.TransferEncoding[0] != "encoding1" {
|
||||
t.Error("expected clonedReq.TransferEncoding to be unchanged")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNoPanicOnRoundTripWithBasicAuth_h1(t *testing.T) {
|
||||
testNoPanicWithBasicAuth(t, h1Mode)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user