Skip to content

Commit 4abf41d

Browse files
committed
Create a new FrameHeader for each comparison
This saves some initialization time. Signed-off-by: Oleg Zaytsev <[email protected]>
1 parent 3d58e97 commit 4abf41d

File tree

2 files changed

+5
-31
lines changed

2 files changed

+5
-31
lines changed

Diff for: http2/frame.go

+5-10
Original file line numberDiff line numberDiff line change
@@ -225,15 +225,10 @@ var fhBytes = sync.Pool{
225225
},
226226
}
227227

228-
var invalidHTTP1LookingFrameHeader = func() FrameHeader {
229-
fh, err := readFrameHeader(make([]byte, frameHeaderLen), strings.NewReader("HTTP/1.1 "))
230-
if err != nil {
231-
panic(err)
232-
}
228+
func invalidHTTP1LookingFrameHeader() FrameHeader {
229+
fh, _ := readFrameHeader(make([]byte, frameHeaderLen), strings.NewReader("HTTP/1.1 "))
233230
return fh
234-
}()
235-
236-
func (h FrameHeader) looksLikeHTTP1Header() bool { return h == invalidHTTP1LookingFrameHeader }
231+
}
237232

238233
// ReadFrameHeader reads 9 bytes from r and returns a FrameHeader.
239234
// Most users should use Framer.ReadFrame instead.
@@ -513,14 +508,14 @@ func (fr *Framer) ReadFrame() (Frame, error) {
513508
return nil, err
514509
}
515510
if fh.Length > fr.maxReadSize {
516-
if fh.looksLikeHTTP1Header() {
511+
if fh == invalidHTTP1LookingFrameHeader() {
517512
return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err)
518513
}
519514
return nil, ErrFrameTooLarge
520515
}
521516
payload := fr.getReadBuf(fh.Length)
522517
if _, err := io.ReadFull(fr.r, payload); err != nil {
523-
if fh.looksLikeHTTP1Header() {
518+
if fh == invalidHTTP1LookingFrameHeader() {
524519
return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err)
525520
}
526521
return nil, err

Diff for: http2/frame_test.go

-21
Original file line numberDiff line numberDiff line change
@@ -626,27 +626,6 @@ func TestReadFrameHeader(t *testing.T) {
626626
}
627627
}
628628

629-
func TestReadFrameHeader_FromHTTP1Header(t *testing.T) {
630-
tests := []struct {
631-
in string
632-
looksLikeHTTP1 bool
633-
}{
634-
// Ignore high bit:
635-
{in: "\xff\xff\xff" + "\xff" + "\xff" + "\xff\xff\xff\xff", looksLikeHTTP1: false},
636-
{in: "HTTP/1.1 400 Bad Request\r\n", looksLikeHTTP1: true},
637-
}
638-
for i, tt := range tests {
639-
got, err := readFrameHeader(make([]byte, 9), strings.NewReader(tt.in))
640-
if err != nil {
641-
t.Errorf("%d. readFrameHeader(%q) = %v", i, tt.in, err)
642-
continue
643-
}
644-
if got.looksLikeHTTP1Header() != tt.looksLikeHTTP1 {
645-
t.Errorf("%d. readFrameHeader(%q).looksLikeHTTP1Header = %v; want %v", i, tt.in, got.looksLikeHTTP1Header(), tt.looksLikeHTTP1)
646-
}
647-
}
648-
}
649-
650629
func TestReadWriteFrameHeader(t *testing.T) {
651630
tests := []struct {
652631
len uint32

0 commit comments

Comments
 (0)