From 8dddf7556ee90e82e02333164644914a2f1af87d Mon Sep 17 00:00:00 2001 From: Andrew Bonventre Date: Tue, 30 Jul 2019 17:03:16 -0400 Subject: [PATCH] net/http: return nil from Header.Clone if the receiver is nil Fixes #33141 Change-Id: I84a8b3496fc9396fd1c09ba9505697c34bdf7105 Reviewed-on: https://go-review.googlesource.com/c/go/+/188022 Run-TryBot: Andrew Bonventre TryBot-Result: Gobot Gobot Reviewed-by: Emmanuel Odeke Reviewed-by: Bryan C. Mills --- src/net/http/header.go | 6 +++++- src/net/http/header_test.go | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/net/http/header.go b/src/net/http/header.go index 1e1ed981ec..230ca03d4f 100644 --- a/src/net/http/header.go +++ b/src/net/http/header.go @@ -78,8 +78,12 @@ func (h Header) write(w io.Writer, trace *httptrace.ClientTrace) error { return h.writeSubset(w, nil, trace) } -// Clone returns a copy of h. +// Clone returns a copy of h or nil if h is nil. func (h Header) Clone() Header { + if h == nil { + return nil + } + // Find total number of values. nv := 0 for _, vv := range h { diff --git a/src/net/http/header_test.go b/src/net/http/header_test.go index 48158d313a..51fcab103b 100644 --- a/src/net/http/header_test.go +++ b/src/net/http/header_test.go @@ -176,6 +176,14 @@ func TestHasToken(t *testing.T) { } } +func TestNilHeaderClone(t *testing.T) { + t1 := Header(nil) + t2 := t1.Clone() + if t2 != nil { + t.Errorf("cloned header does not match original: got: %+v; want: %+v", t2, nil) + } +} + var testHeader = Header{ "Content-Length": {"123"}, "Content-Type": {"text/plain"}, -- 2.50.0