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 {
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() {
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())
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() {