forked from quic-go/quic-go
Merge pull request #453 from lucas-clemente/fix-452
reject stream frames that overflow the offset
This commit is contained in:
@@ -79,7 +79,11 @@ func ParseStreamFrame(r *bytes.Reader) (*StreamFrame, error) {
|
||||
}
|
||||
}
|
||||
|
||||
if !frame.FinBit && len(frame.Data) == 0 {
|
||||
if frame.Offset+frame.DataLen() < frame.Offset {
|
||||
return nil, qerr.Error(qerr.InvalidStreamData, "data overflows maximum offset")
|
||||
}
|
||||
|
||||
if !frame.FinBit && frame.DataLen() == 0 {
|
||||
return nil, qerr.EmptyStreamFrameNoFin
|
||||
}
|
||||
|
||||
|
||||
@@ -65,6 +65,19 @@ var _ = Describe("StreamFrame", func() {
|
||||
Expect(err).To(MatchError(qerr.Error(qerr.InvalidStreamData, "data len too large")))
|
||||
})
|
||||
|
||||
It("rejects frames that overflow the offset", func() {
|
||||
// Offset + len(Data) overflows MaxByteCount
|
||||
f := &StreamFrame{
|
||||
StreamID: 1,
|
||||
Offset: protocol.MaxByteCount,
|
||||
Data: []byte{'f'},
|
||||
}
|
||||
b := &bytes.Buffer{}
|
||||
f.Write(b, protocol.VersionWhatever)
|
||||
_, err := ParseStreamFrame(bytes.NewReader(b.Bytes()))
|
||||
Expect(err).To(MatchError(qerr.Error(qerr.InvalidStreamData, "data overflows maximum offset")))
|
||||
})
|
||||
|
||||
It("errors on EOFs", func() {
|
||||
data := []byte{0xa4, 0x1, 0x2a, 0x00, 0x06, 0x00, 'f', 'o', 'o', 'b', 'a', 'r'}
|
||||
_, err := ParseStreamFrame(bytes.NewReader(data))
|
||||
|
||||
Reference in New Issue
Block a user