Merge pull request #544 from bradfitz/http_util
transport: don't crash if peer sends an empty header field name
This commit is contained in:
@ -120,7 +120,7 @@ type headerFrame interface {
|
|||||||
// reserved by gRPC protocol. Any other headers are classified as the
|
// reserved by gRPC protocol. Any other headers are classified as the
|
||||||
// user-specified metadata.
|
// user-specified metadata.
|
||||||
func isReservedHeader(hdr string) bool {
|
func isReservedHeader(hdr string) bool {
|
||||||
if hdr[0] == ':' {
|
if hdr != "" && hdr[0] == ':' {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
switch hdr {
|
switch hdr {
|
||||||
|
@ -660,3 +660,26 @@ func TestStreamContext(t *testing.T) {
|
|||||||
t.Fatalf("GetStreamFromContext(%v) = %v, %t, want: %v, true", ctx, *s, ok, expectedStream)
|
t.Fatalf("GetStreamFromContext(%v) = %v, %t, want: %v, true", ctx, *s, ok, expectedStream)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIsReservedHeader(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
h string
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{"", false}, // but should be rejected earlier
|
||||||
|
{"foo", false},
|
||||||
|
{"content-type", true},
|
||||||
|
{"grpc-message-type", true},
|
||||||
|
{"grpc-encoding", true},
|
||||||
|
{"grpc-message", true},
|
||||||
|
{"grpc-status", true},
|
||||||
|
{"grpc-timeout", true},
|
||||||
|
{"te", true},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
got := isReservedHeader(tt.h)
|
||||||
|
if got != tt.want {
|
||||||
|
t.Errorf("isReservedHeader(%q) = %v; want %v", tt.h, got, tt.want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user