check that all new Streams initiated by the client have an odd StreamID

work towards #78
This commit is contained in:
Marten Seemann
2016-05-11 18:47:06 +07:00
parent 8cdf832aa0
commit e957ad6184
2 changed files with 20 additions and 2 deletions

View File

@@ -23,6 +23,7 @@ type receivedPacket struct {
}
var (
errInvalidStreamID = errors.New("STREAM_FRAME with invalid StreamID received")
errRstStreamOnInvalidStream = errors.New("RST_STREAM received for unknown stream")
errWindowUpdateOnInvalidStream = errors.New("WINDOW_UPDATE received for unknown stream")
)
@@ -225,9 +226,10 @@ func (s *Session) HandlePacket(remoteAddr interface{}, publicHeader *PublicHeade
// TODO: Ignore data for closed streams
func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error {
if frame.StreamID == 0 {
return errors.New("Session: 0 is not a valid Stream ID")
if !s.isValidStreamID(frame.StreamID) {
return errInvalidStreamID
}
s.streamsMutex.RLock()
str, streamExists := s.streams[frame.StreamID]
s.streamsMutex.RUnlock()
@@ -249,6 +251,13 @@ func (s *Session) handleStreamFrame(frame *frames.StreamFrame) error {
return nil
}
func (s *Session) isValidStreamID(streamID protocol.StreamID) bool {
if streamID%2 != 1 {
return false
}
return true
}
func (s *Session) handleWindowUpdateFrame(frame *frames.WindowUpdateFrame) error {
if frame.StreamID == 0 {
// TODO: handle connection level WindowUpdateFrames

View File

@@ -113,6 +113,15 @@ var _ = Describe("Session", func() {
Expect(p).To(Equal([]byte{0xde, 0xca, 0xfb, 0xad}))
})
It("rejects streams with even StreamIDs", func() {
err := session.handleStreamFrame(&frames.StreamFrame{
StreamID: 4,
Data: []byte{0xde, 0xca, 0xfb, 0xad},
})
Expect(err).To(HaveOccurred())
Expect(err).To(Equal(errInvalidStreamID))
})
It("handles existing streams", func() {
session.handleStreamFrame(&frames.StreamFrame{
StreamID: 5,