mirror of
https://github.com/golang/go
synced 2024-11-23 16:00:06 -07:00
net/http: deep copy Request.TransferEncoding
The existing implementation in Request.Clone() assigns the wrong pointer to r2.TransferEncoding. Fixes #41907 Change-Id: I7f220a41b1b46a55d1a1005e47c6dd69478cb025 Reviewed-on: https://go-review.googlesource.com/c/go/+/261258 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Trust: Emmanuel Odeke <emm.odeke@gmail.com>
This commit is contained in:
parent
e92ce92662
commit
0f53453b32
@ -382,7 +382,7 @@ func (r *Request) Clone(ctx context.Context) *Request {
|
|||||||
if s := r.TransferEncoding; s != nil {
|
if s := r.TransferEncoding; s != nil {
|
||||||
s2 := make([]string, len(s))
|
s2 := make([]string, len(s))
|
||||||
copy(s2, s)
|
copy(s2, s)
|
||||||
r2.TransferEncoding = s
|
r2.TransferEncoding = s2
|
||||||
}
|
}
|
||||||
r2.Form = cloneURLValues(r.Form)
|
r2.Form = cloneURLValues(r.Form)
|
||||||
r2.PostForm = cloneURLValues(r.PostForm)
|
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) {
|
func TestNoPanicOnRoundTripWithBasicAuth_h1(t *testing.T) {
|
||||||
testNoPanicWithBasicAuth(t, h1Mode)
|
testNoPanicWithBasicAuth(t, h1Mode)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user