aboutsummaryrefslogtreecommitdiff
path: root/src/net/http
diff options
context:
space:
mode:
authorMaxime Soulé <zeptomax@gmail.com>2022-03-17 17:01:24 +0100
committerDamien Neil <dneil@google.com>2022-04-11 23:17:38 +0000
commitff14e844d26090e09aa335d836f737c09a7a0402 (patch)
treeeab233ac24492c20574f3a47d0a65cd1c0cd1cff /src/net/http
parentea7e3e3c0f561d1115d647e3e24ca61d0382e1ac (diff)
downloadgo-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.go24
-rw-r--r--src/net/http/httptest/recorder_test.go3
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")