Skip to content

Commit

Permalink
net/http2: omit invalid header value from error message
Browse files Browse the repository at this point in the history
Updates golang/go#43631

Change-Id: Iaacc875fecbdb76f4099d3eb3d67f7ec9d40c224
GitHub-Last-Rev: 3e22a9e
GitHub-Pull-Request: #115
Reviewed-on: https://go-review.googlesource.com/c/net/+/355930
Trust: Damien Neil <[email protected]>
Run-TryBot: Damien Neil <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Damien Neil <[email protected]>
Trust: Cherry Mui <[email protected]>
  • Loading branch information
AlexanderYastrebov authored and tklauser committed Apr 3, 2022
1 parent 543a649 commit 749bd19
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 6 deletions.
2 changes: 1 addition & 1 deletion http2/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ func (e headerFieldNameError) Error() string {
type headerFieldValueError string

func (e headerFieldValueError) Error() string {
return fmt.Sprintf("invalid header field value %q", string(e))
return fmt.Sprintf("invalid header field value for %q", string(e))
}

var (
Expand Down
3 changes: 2 additions & 1 deletion http2/frame.go
Original file line number Diff line number Diff line change
Expand Up @@ -1532,7 +1532,8 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) {
fr.debugReadLoggerf("http2: decoded hpack field %+v", hf)
}
if !httpguts.ValidHeaderFieldValue(hf.Value) {
invalid = headerFieldValueError(hf.Value)
// Don't include the value in the error, because it may be sensitive.
invalid = headerFieldValueError(hf.Name)
}
isPseudo := strings.HasPrefix(hf.Name, ":")
if isPseudo {
Expand Down
2 changes: 1 addition & 1 deletion http2/frame_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1068,7 +1068,7 @@ func TestMetaFrameHeader(t *testing.T) {
name: "invalid_field_value",
w: func(f *Framer) { write(f, encodeHeaderRaw(t, "key", "bad_null\x00")) },
want: streamError(1, ErrCodeProtocol),
wantErrReason: "invalid header field value \"bad_null\\x00\"",
wantErrReason: `invalid header field value for "key"`,
},
}
for i, tt := range tests {
Expand Down
3 changes: 2 additions & 1 deletion http2/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -1770,7 +1770,8 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail
}
for _, v := range vv {
if !httpguts.ValidHeaderFieldValue(v) {
return nil, fmt.Errorf("invalid HTTP header value %q for header %q", v, k)
// Don't include the value in the error, because it may be sensitive.
return nil, fmt.Errorf("invalid HTTP header value for header %q", k)
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions http2/transport_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1487,7 +1487,7 @@ func TestTransportInvalidTrailer_EmptyFieldName(t *testing.T) {
})
}
func TestTransportInvalidTrailer_BinaryFieldValue(t *testing.T) {
testInvalidTrailer(t, oneHeader, headerFieldValueError("has\nnewline"), func(enc *hpack.Encoder) {
testInvalidTrailer(t, oneHeader, headerFieldValueError("x"), func(enc *hpack.Encoder) {
enc.WriteField(hpack.HeaderField{Name: "x", Value: "has\nnewline"})
})
}
Expand Down Expand Up @@ -2451,7 +2451,7 @@ func TestTransportFailsOnInvalidHeaders(t *testing.T) {
},
3: {
h: http.Header{"foo": {"foo\x01bar"}},
wantErr: `invalid HTTP header value "foo\x01bar" for header "foo"`,
wantErr: `invalid HTTP header value for header "foo"`,
},
}

Expand Down

0 comments on commit 749bd19

Please sign in to comment.