diff --git a/header.go b/header.go index f59283d..9f4f2a8 100644 --- a/header.go +++ b/header.go @@ -3515,7 +3515,7 @@ func copyTrailer(dst, src [][]byte) [][]byte { if cap(dst) >= len(src) { dst = dst[:len(src)] } else { - dst = append(dst[:0], src...) + dst = make([][]byte, len(src)) } for i := range dst { diff --git a/header_test.go b/header_test.go index af790e5..9d92c13 100644 --- a/header_test.go +++ b/header_test.go @@ -3724,6 +3724,27 @@ func TestRequestHeader_Keys(t *testing.T) { } } +func TestResponseHeaderCopyToCopiesTrailerKeys(t *testing.T) { + t.Parallel() + + var src ResponseHeader + var dst ResponseHeader + + if err := src.SetTrailer("X-Foo"); err != nil { + t.Fatalf("unexpected error: %v", err) + } + src.CopyTo(&dst) + if err := src.SetTrailer("Y-Bar"); err != nil { + t.Fatalf("unexpected error: %v", err) + } + + got := dst.PeekTrailerKeys() + want := [][]byte{[]byte("X-Foo")} + if !reflect.DeepEqual(got, want) { + t.Fatalf("unexpected copied trailer keys %q. Expecting %q", got, want) + } +} + func TestResponseHeader_Keys(t *testing.T) { h := &ResponseHeader{} h.Add(HeaderConnection, "keep-alive")