diff options
| author | Maxime Soulé <zeptomax@gmail.com> | 2022-03-17 17:01:24 +0100 |
|---|---|---|
| committer | Damien Neil <dneil@google.com> | 2022-04-11 23:17:38 +0000 |
| commit | ff14e844d26090e09aa335d836f737c09a7a0402 (patch) | |
| tree | eab233ac24492c20574f3a47d0a65cd1c0cd1cff /src/net/http | |
| parent | ea7e3e3c0f561d1115d647e3e24ca61d0382e1ac (diff) | |
| download | go-ff14e844d26090e09aa335d836f737c09a7a0402.tar.xz | |
net/http/httptest: allow multiple fields be present in one Trailer field
Fixes #51761
Change-Id: Ibaa17076ba51b666e25333e78180b8c7c4c940ec
Reviewed-on: https://go-review.googlesource.com/c/go/+/393616
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/net/http')
| -rw-r--r-- | src/net/http/httptest/recorder.go | 24 | ||||
| -rw-r--r-- | src/net/http/httptest/recorder_test.go | 3 |
2 files changed, 14 insertions, 13 deletions
diff --git a/src/net/http/httptest/recorder.go b/src/net/http/httptest/recorder.go index 1b712ef2b0..1c1d880155 100644 --- a/src/net/http/httptest/recorder.go +++ b/src/net/http/httptest/recorder.go @@ -207,18 +207,20 @@ func (rw *ResponseRecorder) Result() *http.Response { if trailers, ok := rw.snapHeader["Trailer"]; ok { res.Trailer = make(http.Header, len(trailers)) for _, k := range trailers { - k = http.CanonicalHeaderKey(k) - if !httpguts.ValidTrailerHeader(k) { - // Ignore since forbidden by RFC 7230, section 4.1.2. - continue + for _, k := range strings.Split(k, ",") { + k = http.CanonicalHeaderKey(textproto.TrimString(k)) + if !httpguts.ValidTrailerHeader(k) { + // Ignore since forbidden by RFC 7230, section 4.1.2. + continue + } + vv, ok := rw.HeaderMap[k] + if !ok { + continue + } + vv2 := make([]string, len(vv)) + copy(vv2, vv) + res.Trailer[k] = vv2 } - vv, ok := rw.HeaderMap[k] - if !ok { - continue - } - vv2 := make([]string, len(vv)) - copy(vv2, vv) - res.Trailer[k] = vv2 } } for k, vv := range rw.HeaderMap { diff --git a/src/net/http/httptest/recorder_test.go b/src/net/http/httptest/recorder_test.go index 8cb32dd740..4782eced43 100644 --- a/src/net/http/httptest/recorder_test.go +++ b/src/net/http/httptest/recorder_test.go @@ -220,8 +220,7 @@ func TestRecorder(t *testing.T) { "Trailer headers are correctly recorded", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Non-Trailer", "correct") - w.Header().Set("Trailer", "Trailer-A") - w.Header().Add("Trailer", "Trailer-B") + w.Header().Set("Trailer", "Trailer-A, Trailer-B") w.Header().Add("Trailer", "Trailer-C") io.WriteString(w, "<html>") w.Header().Set("Non-Trailer", "incorrect") |
