http3: reject pseudo header fields in trailers (#4639)

* http3: reject pseudo header fields in trailers

As defined in section 4.3 of RFC 9114.

* http3: improve allocs for trailer map

* http3: rename connection.parseTrailer to decodeTrailers
This commit is contained in:
Marten Seemann
2024-08-23 17:42:18 +07:00
committed by GitHub
parent 17fb3b96ba
commit 920bfb46af
3 changed files with 31 additions and 7 deletions

View File

@@ -101,6 +101,17 @@ func parseHeaders(headers []qpack.HeaderField, isRequest bool) (header, error) {
return hdr, nil
}
func parseTrailers(headers []qpack.HeaderField) (http.Header, error) {
h := make(http.Header, len(headers))
for _, field := range headers {
if field.IsPseudo() {
return nil, fmt.Errorf("http3: received pseudo header in trailer: %s", field.Name)
}
h.Add(field.Name, field.Value)
}
return h, nil
}
func requestFromHeaders(headerFields []qpack.HeaderField) (*http.Request, error) {
hdr, err := parseHeaders(headerFields, true)
if err != nil {