properly handle non-header h2 frames on stream 3

fixes #370
This commit is contained in:
Lucas Clemente
2016-12-14 11:54:26 +01:00
parent bd3c7a96f9
commit facaab7ff7
2 changed files with 15 additions and 1 deletions

View File

@@ -124,7 +124,10 @@ func (s *Server) handleRequest(session streamCreator, headerStream utils.Stream,
if err != nil { if err != nil {
return err return err
} }
h2headersFrame := h2frame.(*http2.HeadersFrame) h2headersFrame, ok := h2frame.(*http2.HeadersFrame)
if !ok {
return qerr.Error(qerr.InvalidHeadersStreamData, "expected a header frame")
}
if !h2headersFrame.HeadersEnded() { if !h2headersFrame.HeadersEnded() {
return errors.New("http2 header continuation not implemented") return errors.New("http2 header continuation not implemented")
} }

View File

@@ -127,6 +127,17 @@ var _ = Describe("H2 server", func() {
Eventually(func() bool { return handlerCalled }).Should(BeTrue()) Eventually(func() bool { return handlerCalled }).Should(BeTrue())
Expect(dataStream.remoteClosed).To(BeFalse()) Expect(dataStream.remoteClosed).To(BeFalse())
}) })
It("errors when non-header frames are received", func() {
headerStream.Write([]byte{
0x0, 0x0, 0x06, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
'f', 'o', 'o', 'b', 'a', 'r',
})
err := s.handleRequest(session, headerStream, &sync.Mutex{}, hpackDecoder, h2framer)
println(err.Error())
Expect(err).To(MatchError("InvalidHeadersStreamData: expected a header frame"))
})
}) })
It("handles the header stream", func() { It("handles the header stream", func() {